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

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

#if defined(NETCONFA_UNSPEC) || (defined(HAVE_DECL_NETCONFA_UNSPEC) && HAVE_DECL_NETCONFA_UNSPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETCONFA_UNSPEC) == (0), "NETCONFA_UNSPEC != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETCONFA_UNSPEC 0
#endif
#if defined(NETCONFA_IFINDEX) || (defined(HAVE_DECL_NETCONFA_IFINDEX) && HAVE_DECL_NETCONFA_IFINDEX)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETCONFA_IFINDEX) == (1), "NETCONFA_IFINDEX != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETCONFA_IFINDEX 1
#endif
#if defined(NETCONFA_FORWARDING) || (defined(HAVE_DECL_NETCONFA_FORWARDING) && HAVE_DECL_NETCONFA_FORWARDING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETCONFA_FORWARDING) == (2), "NETCONFA_FORWARDING != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETCONFA_FORWARDING 2
#endif
#if defined(NETCONFA_RP_FILTER) || (defined(HAVE_DECL_NETCONFA_RP_FILTER) && HAVE_DECL_NETCONFA_RP_FILTER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETCONFA_RP_FILTER) == (3), "NETCONFA_RP_FILTER != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETCONFA_RP_FILTER 3
#endif
#if defined(NETCONFA_MC_FORWARDING) || (defined(HAVE_DECL_NETCONFA_MC_FORWARDING) && HAVE_DECL_NETCONFA_MC_FORWARDING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETCONFA_MC_FORWARDING) == (4), "NETCONFA_MC_FORWARDING != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETCONFA_MC_FORWARDING 4
#endif
#if defined(NETCONFA_PROXY_NEIGH) || (defined(HAVE_DECL_NETCONFA_PROXY_NEIGH) && HAVE_DECL_NETCONFA_PROXY_NEIGH)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETCONFA_PROXY_NEIGH) == (5), "NETCONFA_PROXY_NEIGH != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETCONFA_PROXY_NEIGH 5
#endif
#if defined(NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) || (defined(HAVE_DECL_NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) && HAVE_DECL_NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) == (6), "NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN 6
#endif
#if defined(NETCONFA_INPUT) || (defined(HAVE_DECL_NETCONFA_INPUT) && HAVE_DECL_NETCONFA_INPUT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETCONFA_INPUT) == (7), "NETCONFA_INPUT != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETCONFA_INPUT 7
#endif
#if defined(NETCONFA_BC_FORWARDING) || (defined(HAVE_DECL_NETCONFA_BC_FORWARDING) && HAVE_DECL_NETCONFA_BC_FORWARDING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETCONFA_BC_FORWARDING) == (8), "NETCONFA_BC_FORWARDING != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETCONFA_BC_FORWARDING 8
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat rtnl_netconf_attrs in mpers mode

# else

static
const struct xlat rtnl_netconf_attrs[] = {
 XLAT(NETCONFA_UNSPEC),
 XLAT(NETCONFA_IFINDEX),
 XLAT(NETCONFA_FORWARDING),
 XLAT(NETCONFA_RP_FILTER),
 XLAT(NETCONFA_MC_FORWARDING),
 XLAT(NETCONFA_PROXY_NEIGH),
 XLAT(NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN),
 XLAT(NETCONFA_INPUT),
 XLAT(NETCONFA_BC_FORWARDING),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
