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

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

#if defined(NDA_UNSPEC) || (defined(HAVE_DECL_NDA_UNSPEC) && HAVE_DECL_NDA_UNSPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_UNSPEC) == (0), "NDA_UNSPEC != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_UNSPEC 0
#endif
#if defined(NDA_DST) || (defined(HAVE_DECL_NDA_DST) && HAVE_DECL_NDA_DST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_DST) == (1), "NDA_DST != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_DST 1
#endif
#if defined(NDA_LLADDR) || (defined(HAVE_DECL_NDA_LLADDR) && HAVE_DECL_NDA_LLADDR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_LLADDR) == (2), "NDA_LLADDR != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_LLADDR 2
#endif
#if defined(NDA_CACHEINFO) || (defined(HAVE_DECL_NDA_CACHEINFO) && HAVE_DECL_NDA_CACHEINFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_CACHEINFO) == (3), "NDA_CACHEINFO != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_CACHEINFO 3
#endif
#if defined(NDA_PROBES) || (defined(HAVE_DECL_NDA_PROBES) && HAVE_DECL_NDA_PROBES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_PROBES) == (4), "NDA_PROBES != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_PROBES 4
#endif
#if defined(NDA_VLAN) || (defined(HAVE_DECL_NDA_VLAN) && HAVE_DECL_NDA_VLAN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_VLAN) == (5), "NDA_VLAN != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_VLAN 5
#endif
#if defined(NDA_PORT) || (defined(HAVE_DECL_NDA_PORT) && HAVE_DECL_NDA_PORT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_PORT) == (6), "NDA_PORT != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_PORT 6
#endif
#if defined(NDA_VNI) || (defined(HAVE_DECL_NDA_VNI) && HAVE_DECL_NDA_VNI)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_VNI) == (7), "NDA_VNI != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_VNI 7
#endif
#if defined(NDA_IFINDEX) || (defined(HAVE_DECL_NDA_IFINDEX) && HAVE_DECL_NDA_IFINDEX)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_IFINDEX) == (8), "NDA_IFINDEX != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_IFINDEX 8
#endif
#if defined(NDA_MASTER) || (defined(HAVE_DECL_NDA_MASTER) && HAVE_DECL_NDA_MASTER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_MASTER) == (9), "NDA_MASTER != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_MASTER 9
#endif
#if defined(NDA_LINK_NETNSID) || (defined(HAVE_DECL_NDA_LINK_NETNSID) && HAVE_DECL_NDA_LINK_NETNSID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_LINK_NETNSID) == (10), "NDA_LINK_NETNSID != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_LINK_NETNSID 10
#endif
#if defined(NDA_SRC_VNI) || (defined(HAVE_DECL_NDA_SRC_VNI) && HAVE_DECL_NDA_SRC_VNI)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDA_SRC_VNI) == (11), "NDA_SRC_VNI != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDA_SRC_VNI 11
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat rtnl_neigh_attrs in mpers mode

# else

static
const struct xlat rtnl_neigh_attrs[] = {
 XLAT(NDA_UNSPEC),
 XLAT(NDA_DST),
 XLAT(NDA_LLADDR),
 XLAT(NDA_CACHEINFO),
 XLAT(NDA_PROBES),
 XLAT(NDA_VLAN),
 XLAT(NDA_PORT),
 XLAT(NDA_VNI),
 XLAT(NDA_IFINDEX),
 XLAT(NDA_MASTER),
 XLAT(NDA_LINK_NETNSID),
 XLAT(NDA_SRC_VNI),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
