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

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

#if defined(NDTPA_UNSPEC) || (defined(HAVE_DECL_NDTPA_UNSPEC) && HAVE_DECL_NDTPA_UNSPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_UNSPEC) == (0), "NDTPA_UNSPEC != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_UNSPEC 0
#endif
#if defined(NDTPA_IFINDEX) || (defined(HAVE_DECL_NDTPA_IFINDEX) && HAVE_DECL_NDTPA_IFINDEX)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_IFINDEX) == (1), "NDTPA_IFINDEX != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_IFINDEX 1
#endif
#if defined(NDTPA_REFCNT) || (defined(HAVE_DECL_NDTPA_REFCNT) && HAVE_DECL_NDTPA_REFCNT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_REFCNT) == (2), "NDTPA_REFCNT != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_REFCNT 2
#endif
#if defined(NDTPA_REACHABLE_TIME) || (defined(HAVE_DECL_NDTPA_REACHABLE_TIME) && HAVE_DECL_NDTPA_REACHABLE_TIME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_REACHABLE_TIME) == (3), "NDTPA_REACHABLE_TIME != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_REACHABLE_TIME 3
#endif
#if defined(NDTPA_BASE_REACHABLE_TIME) || (defined(HAVE_DECL_NDTPA_BASE_REACHABLE_TIME) && HAVE_DECL_NDTPA_BASE_REACHABLE_TIME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_BASE_REACHABLE_TIME) == (4), "NDTPA_BASE_REACHABLE_TIME != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_BASE_REACHABLE_TIME 4
#endif
#if defined(NDTPA_RETRANS_TIME) || (defined(HAVE_DECL_NDTPA_RETRANS_TIME) && HAVE_DECL_NDTPA_RETRANS_TIME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_RETRANS_TIME) == (5), "NDTPA_RETRANS_TIME != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_RETRANS_TIME 5
#endif
#if defined(NDTPA_GC_STALETIME) || (defined(HAVE_DECL_NDTPA_GC_STALETIME) && HAVE_DECL_NDTPA_GC_STALETIME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_GC_STALETIME) == (6), "NDTPA_GC_STALETIME != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_GC_STALETIME 6
#endif
#if defined(NDTPA_DELAY_PROBE_TIME) || (defined(HAVE_DECL_NDTPA_DELAY_PROBE_TIME) && HAVE_DECL_NDTPA_DELAY_PROBE_TIME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_DELAY_PROBE_TIME) == (7), "NDTPA_DELAY_PROBE_TIME != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_DELAY_PROBE_TIME 7
#endif
#if defined(NDTPA_QUEUE_LEN) || (defined(HAVE_DECL_NDTPA_QUEUE_LEN) && HAVE_DECL_NDTPA_QUEUE_LEN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_QUEUE_LEN) == (8), "NDTPA_QUEUE_LEN != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_QUEUE_LEN 8
#endif
#if defined(NDTPA_APP_PROBES) || (defined(HAVE_DECL_NDTPA_APP_PROBES) && HAVE_DECL_NDTPA_APP_PROBES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_APP_PROBES) == (9), "NDTPA_APP_PROBES != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_APP_PROBES 9
#endif
#if defined(NDTPA_UCAST_PROBES) || (defined(HAVE_DECL_NDTPA_UCAST_PROBES) && HAVE_DECL_NDTPA_UCAST_PROBES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_UCAST_PROBES) == (10), "NDTPA_UCAST_PROBES != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_UCAST_PROBES 10
#endif
#if defined(NDTPA_MCAST_PROBES) || (defined(HAVE_DECL_NDTPA_MCAST_PROBES) && HAVE_DECL_NDTPA_MCAST_PROBES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_MCAST_PROBES) == (11), "NDTPA_MCAST_PROBES != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_MCAST_PROBES 11
#endif
#if defined(NDTPA_ANYCAST_DELAY) || (defined(HAVE_DECL_NDTPA_ANYCAST_DELAY) && HAVE_DECL_NDTPA_ANYCAST_DELAY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_ANYCAST_DELAY) == (12), "NDTPA_ANYCAST_DELAY != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_ANYCAST_DELAY 12
#endif
#if defined(NDTPA_PROXY_DELAY) || (defined(HAVE_DECL_NDTPA_PROXY_DELAY) && HAVE_DECL_NDTPA_PROXY_DELAY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_PROXY_DELAY) == (13), "NDTPA_PROXY_DELAY != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_PROXY_DELAY 13
#endif
#if defined(NDTPA_PROXY_QLEN) || (defined(HAVE_DECL_NDTPA_PROXY_QLEN) && HAVE_DECL_NDTPA_PROXY_QLEN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_PROXY_QLEN) == (14), "NDTPA_PROXY_QLEN != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_PROXY_QLEN 14
#endif
#if defined(NDTPA_LOCKTIME) || (defined(HAVE_DECL_NDTPA_LOCKTIME) && HAVE_DECL_NDTPA_LOCKTIME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_LOCKTIME) == (15), "NDTPA_LOCKTIME != 15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_LOCKTIME 15
#endif
#if defined(NDTPA_QUEUE_LENBYTES) || (defined(HAVE_DECL_NDTPA_QUEUE_LENBYTES) && HAVE_DECL_NDTPA_QUEUE_LENBYTES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_QUEUE_LENBYTES) == (16), "NDTPA_QUEUE_LENBYTES != 16");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_QUEUE_LENBYTES 16
#endif
#if defined(NDTPA_MCAST_REPROBES) || (defined(HAVE_DECL_NDTPA_MCAST_REPROBES) && HAVE_DECL_NDTPA_MCAST_REPROBES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_MCAST_REPROBES) == (17), "NDTPA_MCAST_REPROBES != 17");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_MCAST_REPROBES 17
#endif
#if defined(NDTPA_PAD) || (defined(HAVE_DECL_NDTPA_PAD) && HAVE_DECL_NDTPA_PAD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NDTPA_PAD) == (18), "NDTPA_PAD != 18");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NDTPA_PAD 18
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat rtnl_neightbl_parms_attrs in mpers mode

# else

static
const struct xlat rtnl_neightbl_parms_attrs[] = {
 XLAT(NDTPA_UNSPEC),
 XLAT(NDTPA_IFINDEX),
 XLAT(NDTPA_REFCNT),
 XLAT(NDTPA_REACHABLE_TIME),
 XLAT(NDTPA_BASE_REACHABLE_TIME),
 XLAT(NDTPA_RETRANS_TIME),
 XLAT(NDTPA_GC_STALETIME),
 XLAT(NDTPA_DELAY_PROBE_TIME),
 XLAT(NDTPA_QUEUE_LEN),
 XLAT(NDTPA_APP_PROBES),
 XLAT(NDTPA_UCAST_PROBES),
 XLAT(NDTPA_MCAST_PROBES),
 XLAT(NDTPA_ANYCAST_DELAY),
 XLAT(NDTPA_PROXY_DELAY),
 XLAT(NDTPA_PROXY_QLEN),
 XLAT(NDTPA_LOCKTIME),
 XLAT(NDTPA_QUEUE_LENBYTES),
 XLAT(NDTPA_MCAST_REPROBES),
 XLAT(NDTPA_PAD),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
