/* Generated by ./xlat/gen.sh from ./xlat/nf_ctnetlink_exp_msg_types.in; do not edit. */

#include "gcc_compat.h"
#include "static_assert.h"

#if defined(IPCTNL_MSG_EXP_NEW) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_NEW) && HAVE_DECL_IPCTNL_MSG_EXP_NEW)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_EXP_NEW) == (0), "IPCTNL_MSG_EXP_NEW != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_EXP_NEW 0
#endif
#if defined(IPCTNL_MSG_EXP_GET) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_GET) && HAVE_DECL_IPCTNL_MSG_EXP_GET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_EXP_GET) == (1), "IPCTNL_MSG_EXP_GET != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_EXP_GET 1
#endif
#if defined(IPCTNL_MSG_EXP_DELETE) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_DELETE) && HAVE_DECL_IPCTNL_MSG_EXP_DELETE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_EXP_DELETE) == (2), "IPCTNL_MSG_EXP_DELETE != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_EXP_DELETE 2
#endif
#if defined(IPCTNL_MSG_EXP_GET_STATS_CPU) || (defined(HAVE_DECL_IPCTNL_MSG_EXP_GET_STATS_CPU) && HAVE_DECL_IPCTNL_MSG_EXP_GET_STATS_CPU)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_EXP_GET_STATS_CPU) == (3), "IPCTNL_MSG_EXP_GET_STATS_CPU != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_EXP_GET_STATS_CPU 3
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat nf_ctnetlink_exp_msg_types in mpers mode

# else

static
const struct xlat nf_ctnetlink_exp_msg_types[] = {
 XLAT(IPCTNL_MSG_EXP_NEW),
 XLAT(IPCTNL_MSG_EXP_GET),
 XLAT(IPCTNL_MSG_EXP_DELETE),
 XLAT(IPCTNL_MSG_EXP_GET_STATS_CPU),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
