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

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

#if defined(RTN_UNSPEC) || (defined(HAVE_DECL_RTN_UNSPEC) && HAVE_DECL_RTN_UNSPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_UNSPEC) == (0), "RTN_UNSPEC != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_UNSPEC 0
#endif
#if defined(RTN_UNICAST) || (defined(HAVE_DECL_RTN_UNICAST) && HAVE_DECL_RTN_UNICAST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_UNICAST) == (1), "RTN_UNICAST != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_UNICAST 1
#endif
#if defined(RTN_LOCAL) || (defined(HAVE_DECL_RTN_LOCAL) && HAVE_DECL_RTN_LOCAL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_LOCAL) == (2), "RTN_LOCAL != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_LOCAL 2
#endif
#if defined(RTN_BROADCAST) || (defined(HAVE_DECL_RTN_BROADCAST) && HAVE_DECL_RTN_BROADCAST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_BROADCAST) == (3), "RTN_BROADCAST != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_BROADCAST 3
#endif
#if defined(RTN_ANYCAST) || (defined(HAVE_DECL_RTN_ANYCAST) && HAVE_DECL_RTN_ANYCAST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_ANYCAST) == (4), "RTN_ANYCAST != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_ANYCAST 4
#endif
#if defined(RTN_MULTICAST) || (defined(HAVE_DECL_RTN_MULTICAST) && HAVE_DECL_RTN_MULTICAST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_MULTICAST) == (5), "RTN_MULTICAST != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_MULTICAST 5
#endif
#if defined(RTN_BLACKHOLE) || (defined(HAVE_DECL_RTN_BLACKHOLE) && HAVE_DECL_RTN_BLACKHOLE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_BLACKHOLE) == (6), "RTN_BLACKHOLE != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_BLACKHOLE 6
#endif
#if defined(RTN_UNREACHABLE) || (defined(HAVE_DECL_RTN_UNREACHABLE) && HAVE_DECL_RTN_UNREACHABLE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_UNREACHABLE) == (7), "RTN_UNREACHABLE != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_UNREACHABLE 7
#endif
#if defined(RTN_PROHIBIT) || (defined(HAVE_DECL_RTN_PROHIBIT) && HAVE_DECL_RTN_PROHIBIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_PROHIBIT) == (8), "RTN_PROHIBIT != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_PROHIBIT 8
#endif
#if defined(RTN_THROW) || (defined(HAVE_DECL_RTN_THROW) && HAVE_DECL_RTN_THROW)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_THROW) == (9), "RTN_THROW != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_THROW 9
#endif
#if defined(RTN_NAT) || (defined(HAVE_DECL_RTN_NAT) && HAVE_DECL_RTN_NAT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_NAT) == (10), "RTN_NAT != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_NAT 10
#endif
#if defined(RTN_XRESOLVE) || (defined(HAVE_DECL_RTN_XRESOLVE) && HAVE_DECL_RTN_XRESOLVE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTN_XRESOLVE) == (11), "RTN_XRESOLVE != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTN_XRESOLVE 11
#endif

#ifndef XLAT_MACROS_ONLY

# ifndef IN_MPERS

const struct xlat routing_types[] = {
 XLAT(RTN_UNSPEC),
 XLAT(RTN_UNICAST),
 XLAT(RTN_LOCAL),
 XLAT(RTN_BROADCAST),
 XLAT(RTN_ANYCAST),
 XLAT(RTN_MULTICAST),
 XLAT(RTN_BLACKHOLE),
 XLAT(RTN_UNREACHABLE),
 XLAT(RTN_PROHIBIT),
 XLAT(RTN_THROW),
 XLAT(RTN_NAT),
 XLAT(RTN_XRESOLVE),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
