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

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

#if defined(NFNL_SUBSYS_NONE) || (defined(HAVE_DECL_NFNL_SUBSYS_NONE) && HAVE_DECL_NFNL_SUBSYS_NONE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_NONE) == (0), "NFNL_SUBSYS_NONE != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_NONE 0
#endif
#if defined(NFNL_SUBSYS_CTNETLINK) || (defined(HAVE_DECL_NFNL_SUBSYS_CTNETLINK) && HAVE_DECL_NFNL_SUBSYS_CTNETLINK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_CTNETLINK) == (1), "NFNL_SUBSYS_CTNETLINK != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_CTNETLINK 1
#endif
#if defined(NFNL_SUBSYS_CTNETLINK_EXP) || (defined(HAVE_DECL_NFNL_SUBSYS_CTNETLINK_EXP) && HAVE_DECL_NFNL_SUBSYS_CTNETLINK_EXP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_CTNETLINK_EXP) == (2), "NFNL_SUBSYS_CTNETLINK_EXP != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_CTNETLINK_EXP 2
#endif
#if defined(NFNL_SUBSYS_QUEUE) || (defined(HAVE_DECL_NFNL_SUBSYS_QUEUE) && HAVE_DECL_NFNL_SUBSYS_QUEUE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_QUEUE) == (3), "NFNL_SUBSYS_QUEUE != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_QUEUE 3
#endif
#if defined(NFNL_SUBSYS_ULOG) || (defined(HAVE_DECL_NFNL_SUBSYS_ULOG) && HAVE_DECL_NFNL_SUBSYS_ULOG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_ULOG) == (4), "NFNL_SUBSYS_ULOG != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_ULOG 4
#endif
#if defined(NFNL_SUBSYS_OSF) || (defined(HAVE_DECL_NFNL_SUBSYS_OSF) && HAVE_DECL_NFNL_SUBSYS_OSF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_OSF) == (5), "NFNL_SUBSYS_OSF != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_OSF 5
#endif
#if defined(NFNL_SUBSYS_IPSET) || (defined(HAVE_DECL_NFNL_SUBSYS_IPSET) && HAVE_DECL_NFNL_SUBSYS_IPSET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_IPSET) == (6), "NFNL_SUBSYS_IPSET != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_IPSET 6
#endif
#if defined(NFNL_SUBSYS_ACCT) || (defined(HAVE_DECL_NFNL_SUBSYS_ACCT) && HAVE_DECL_NFNL_SUBSYS_ACCT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_ACCT) == (7), "NFNL_SUBSYS_ACCT != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_ACCT 7
#endif
#if defined(NFNL_SUBSYS_CTNETLINK_TIMEOUT) || (defined(HAVE_DECL_NFNL_SUBSYS_CTNETLINK_TIMEOUT) && HAVE_DECL_NFNL_SUBSYS_CTNETLINK_TIMEOUT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_CTNETLINK_TIMEOUT) == (8), "NFNL_SUBSYS_CTNETLINK_TIMEOUT != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_CTNETLINK_TIMEOUT 8
#endif
#if defined(NFNL_SUBSYS_CTHELPER) || (defined(HAVE_DECL_NFNL_SUBSYS_CTHELPER) && HAVE_DECL_NFNL_SUBSYS_CTHELPER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_CTHELPER) == (9), "NFNL_SUBSYS_CTHELPER != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_CTHELPER 9
#endif
#if defined(NFNL_SUBSYS_NFTABLES) || (defined(HAVE_DECL_NFNL_SUBSYS_NFTABLES) && HAVE_DECL_NFNL_SUBSYS_NFTABLES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_NFTABLES) == (10), "NFNL_SUBSYS_NFTABLES != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_NFTABLES 10
#endif
#if defined(NFNL_SUBSYS_NFT_COMPAT) || (defined(HAVE_DECL_NFNL_SUBSYS_NFT_COMPAT) && HAVE_DECL_NFNL_SUBSYS_NFT_COMPAT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NFNL_SUBSYS_NFT_COMPAT) == (11), "NFNL_SUBSYS_NFT_COMPAT != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NFNL_SUBSYS_NFT_COMPAT 11
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat nl_netfilter_subsys_ids in mpers mode

# else

static
const struct xlat nl_netfilter_subsys_ids[] = {
 XLAT(NFNL_SUBSYS_NONE),
 XLAT(NFNL_SUBSYS_CTNETLINK),
 XLAT(NFNL_SUBSYS_CTNETLINK_EXP),
 XLAT(NFNL_SUBSYS_QUEUE),
 XLAT(NFNL_SUBSYS_ULOG),
 XLAT(NFNL_SUBSYS_OSF),
 XLAT(NFNL_SUBSYS_IPSET),
 XLAT(NFNL_SUBSYS_ACCT),
 XLAT(NFNL_SUBSYS_CTNETLINK_TIMEOUT),
 XLAT(NFNL_SUBSYS_CTHELPER),
 XLAT(NFNL_SUBSYS_NFTABLES),
 XLAT(NFNL_SUBSYS_NFT_COMPAT),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
