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

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

#if defined(MDBA_ROUTER_PATTR_UNSPEC) || (defined(HAVE_DECL_MDBA_ROUTER_PATTR_UNSPEC) && HAVE_DECL_MDBA_ROUTER_PATTR_UNSPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MDBA_ROUTER_PATTR_UNSPEC) == (0), "MDBA_ROUTER_PATTR_UNSPEC != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MDBA_ROUTER_PATTR_UNSPEC 0
#endif
#if defined(MDBA_ROUTER_PATTR_TIMER) || (defined(HAVE_DECL_MDBA_ROUTER_PATTR_TIMER) && HAVE_DECL_MDBA_ROUTER_PATTR_TIMER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MDBA_ROUTER_PATTR_TIMER) == (1), "MDBA_ROUTER_PATTR_TIMER != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MDBA_ROUTER_PATTR_TIMER 1
#endif
#if defined(MDBA_ROUTER_PATTR_TYPE) || (defined(HAVE_DECL_MDBA_ROUTER_PATTR_TYPE) && HAVE_DECL_MDBA_ROUTER_PATTR_TYPE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((MDBA_ROUTER_PATTR_TYPE) == (2), "MDBA_ROUTER_PATTR_TYPE != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define MDBA_ROUTER_PATTR_TYPE 2
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat rtnl_mdba_router_pattr_attrs in mpers mode

# else

static
const struct xlat rtnl_mdba_router_pattr_attrs[] = {
 XLAT(MDBA_ROUTER_PATTR_UNSPEC),
 XLAT(MDBA_ROUTER_PATTR_TIMER),
 XLAT(MDBA_ROUTER_PATTR_TYPE),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
