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

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

#if defined(IPCTNL_MSG_CT_NEW) || (defined(HAVE_DECL_IPCTNL_MSG_CT_NEW) && HAVE_DECL_IPCTNL_MSG_CT_NEW)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_CT_NEW) == (0), "IPCTNL_MSG_CT_NEW != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_CT_NEW 0
#endif
#if defined(IPCTNL_MSG_CT_GET) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET) && HAVE_DECL_IPCTNL_MSG_CT_GET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_CT_GET) == (1), "IPCTNL_MSG_CT_GET != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_CT_GET 1
#endif
#if defined(IPCTNL_MSG_CT_DELETE) || (defined(HAVE_DECL_IPCTNL_MSG_CT_DELETE) && HAVE_DECL_IPCTNL_MSG_CT_DELETE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_CT_DELETE) == (2), "IPCTNL_MSG_CT_DELETE != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_CT_DELETE 2
#endif
#if defined(IPCTNL_MSG_CT_GET_CTRZERO) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_CTRZERO) && HAVE_DECL_IPCTNL_MSG_CT_GET_CTRZERO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_CT_GET_CTRZERO) == (3), "IPCTNL_MSG_CT_GET_CTRZERO != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_CT_GET_CTRZERO 3
#endif
#if defined(IPCTNL_MSG_CT_GET_STATS_CPU) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_STATS_CPU) && HAVE_DECL_IPCTNL_MSG_CT_GET_STATS_CPU)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_CT_GET_STATS_CPU) == (4), "IPCTNL_MSG_CT_GET_STATS_CPU != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_CT_GET_STATS_CPU 4
#endif
#if defined(IPCTNL_MSG_CT_GET_STATS) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_STATS) && HAVE_DECL_IPCTNL_MSG_CT_GET_STATS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_CT_GET_STATS) == (5), "IPCTNL_MSG_CT_GET_STATS != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_CT_GET_STATS 5
#endif
#if defined(IPCTNL_MSG_CT_GET_DYING) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_DYING) && HAVE_DECL_IPCTNL_MSG_CT_GET_DYING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_CT_GET_DYING) == (6), "IPCTNL_MSG_CT_GET_DYING != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_CT_GET_DYING 6
#endif
#if defined(IPCTNL_MSG_CT_GET_UNCONFIRMED) || (defined(HAVE_DECL_IPCTNL_MSG_CT_GET_UNCONFIRMED) && HAVE_DECL_IPCTNL_MSG_CT_GET_UNCONFIRMED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPCTNL_MSG_CT_GET_UNCONFIRMED) == (7), "IPCTNL_MSG_CT_GET_UNCONFIRMED != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPCTNL_MSG_CT_GET_UNCONFIRMED 7
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat nf_ctnetlink_msg_types in mpers mode

# else

static
const struct xlat nf_ctnetlink_msg_types[] = {
 XLAT(IPCTNL_MSG_CT_NEW),
 XLAT(IPCTNL_MSG_CT_GET),
 XLAT(IPCTNL_MSG_CT_DELETE),
 XLAT(IPCTNL_MSG_CT_GET_CTRZERO),
 XLAT(IPCTNL_MSG_CT_GET_STATS_CPU),
 XLAT(IPCTNL_MSG_CT_GET_STATS),
 XLAT(IPCTNL_MSG_CT_GET_DYING),
 XLAT(IPCTNL_MSG_CT_GET_UNCONFIRMED),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
