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

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

#if defined(IPSET_CMD_NONE) || (defined(HAVE_DECL_IPSET_CMD_NONE) && HAVE_DECL_IPSET_CMD_NONE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_NONE) == (0), "IPSET_CMD_NONE != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_NONE 0
#endif
#if defined(IPSET_CMD_PROTOCOL) || (defined(HAVE_DECL_IPSET_CMD_PROTOCOL) && HAVE_DECL_IPSET_CMD_PROTOCOL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_PROTOCOL) == (1), "IPSET_CMD_PROTOCOL != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_PROTOCOL 1
#endif
#if defined(IPSET_CMD_CREATE) || (defined(HAVE_DECL_IPSET_CMD_CREATE) && HAVE_DECL_IPSET_CMD_CREATE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_CREATE) == (2), "IPSET_CMD_CREATE != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_CREATE 2
#endif
#if defined(IPSET_CMD_DESTROY) || (defined(HAVE_DECL_IPSET_CMD_DESTROY) && HAVE_DECL_IPSET_CMD_DESTROY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_DESTROY) == (3), "IPSET_CMD_DESTROY != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_DESTROY 3
#endif
#if defined(IPSET_CMD_FLUSH) || (defined(HAVE_DECL_IPSET_CMD_FLUSH) && HAVE_DECL_IPSET_CMD_FLUSH)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_FLUSH) == (4), "IPSET_CMD_FLUSH != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_FLUSH 4
#endif
#if defined(IPSET_CMD_RENAME) || (defined(HAVE_DECL_IPSET_CMD_RENAME) && HAVE_DECL_IPSET_CMD_RENAME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_RENAME) == (5), "IPSET_CMD_RENAME != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_RENAME 5
#endif
#if defined(IPSET_CMD_SWAP) || (defined(HAVE_DECL_IPSET_CMD_SWAP) && HAVE_DECL_IPSET_CMD_SWAP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_SWAP) == (6), "IPSET_CMD_SWAP != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_SWAP 6
#endif
#if defined(IPSET_CMD_LIST) || (defined(HAVE_DECL_IPSET_CMD_LIST) && HAVE_DECL_IPSET_CMD_LIST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_LIST) == (7), "IPSET_CMD_LIST != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_LIST 7
#endif
#if defined(IPSET_CMD_SAVE) || (defined(HAVE_DECL_IPSET_CMD_SAVE) && HAVE_DECL_IPSET_CMD_SAVE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_SAVE) == (8), "IPSET_CMD_SAVE != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_SAVE 8
#endif
#if defined(IPSET_CMD_ADD) || (defined(HAVE_DECL_IPSET_CMD_ADD) && HAVE_DECL_IPSET_CMD_ADD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_ADD) == (9), "IPSET_CMD_ADD != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_ADD 9
#endif
#if defined(IPSET_CMD_DEL) || (defined(HAVE_DECL_IPSET_CMD_DEL) && HAVE_DECL_IPSET_CMD_DEL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_DEL) == (10), "IPSET_CMD_DEL != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_DEL 10
#endif
#if defined(IPSET_CMD_TEST) || (defined(HAVE_DECL_IPSET_CMD_TEST) && HAVE_DECL_IPSET_CMD_TEST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_TEST) == (11), "IPSET_CMD_TEST != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_TEST 11
#endif
#if defined(IPSET_CMD_HEADER) || (defined(HAVE_DECL_IPSET_CMD_HEADER) && HAVE_DECL_IPSET_CMD_HEADER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_HEADER) == (12), "IPSET_CMD_HEADER != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_HEADER 12
#endif
#if defined(IPSET_CMD_TYPE) || (defined(HAVE_DECL_IPSET_CMD_TYPE) && HAVE_DECL_IPSET_CMD_TYPE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_TYPE) == (13), "IPSET_CMD_TYPE != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_TYPE 13
#endif
#if defined(IPSET_CMD_RESTORE) || (defined(HAVE_DECL_IPSET_CMD_RESTORE) && HAVE_DECL_IPSET_CMD_RESTORE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_RESTORE) == (14), "IPSET_CMD_RESTORE != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_RESTORE 14
#endif
#if defined(IPSET_CMD_HELP) || (defined(HAVE_DECL_IPSET_CMD_HELP) && HAVE_DECL_IPSET_CMD_HELP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_HELP) == (15), "IPSET_CMD_HELP != 15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_HELP 15
#endif
#if defined(IPSET_CMD_VERSION) || (defined(HAVE_DECL_IPSET_CMD_VERSION) && HAVE_DECL_IPSET_CMD_VERSION)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_VERSION) == (16), "IPSET_CMD_VERSION != 16");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_VERSION 16
#endif
#if defined(IPSET_CMD_QUIT) || (defined(HAVE_DECL_IPSET_CMD_QUIT) && HAVE_DECL_IPSET_CMD_QUIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_QUIT) == (17), "IPSET_CMD_QUIT != 17");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_QUIT 17
#endif
#if defined(IPSET_CMD_COMMIT) || (defined(HAVE_DECL_IPSET_CMD_COMMIT) && HAVE_DECL_IPSET_CMD_COMMIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPSET_CMD_COMMIT) == (18), "IPSET_CMD_COMMIT != 18");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPSET_CMD_COMMIT 18
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat nf_ipset_msg_types in mpers mode

# else

static
const struct xlat nf_ipset_msg_types[] = {
 XLAT(IPSET_CMD_NONE),
 XLAT(IPSET_CMD_PROTOCOL),
 XLAT(IPSET_CMD_CREATE),
 XLAT(IPSET_CMD_DESTROY),
 XLAT(IPSET_CMD_FLUSH),
 XLAT(IPSET_CMD_RENAME),
 XLAT(IPSET_CMD_SWAP),
 XLAT(IPSET_CMD_LIST),
 XLAT(IPSET_CMD_SAVE),
 XLAT(IPSET_CMD_ADD),
 XLAT(IPSET_CMD_DEL),
 XLAT(IPSET_CMD_TEST),
 XLAT(IPSET_CMD_HEADER),
 XLAT(IPSET_CMD_TYPE),

 XLAT(IPSET_CMD_RESTORE),
 XLAT(IPSET_CMD_HELP),
 XLAT(IPSET_CMD_VERSION),
 XLAT(IPSET_CMD_QUIT),

 XLAT(IPSET_CMD_COMMIT),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
