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

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

#if defined(RTPROT_UNSPEC) || (defined(HAVE_DECL_RTPROT_UNSPEC) && HAVE_DECL_RTPROT_UNSPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_UNSPEC) == (0), "RTPROT_UNSPEC != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_UNSPEC 0
#endif
#if defined(RTPROT_REDIRECT) || (defined(HAVE_DECL_RTPROT_REDIRECT) && HAVE_DECL_RTPROT_REDIRECT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_REDIRECT) == (1), "RTPROT_REDIRECT != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_REDIRECT 1
#endif
#if defined(RTPROT_KERNEL) || (defined(HAVE_DECL_RTPROT_KERNEL) && HAVE_DECL_RTPROT_KERNEL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_KERNEL) == (2), "RTPROT_KERNEL != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_KERNEL 2
#endif
#if defined(RTPROT_BOOT) || (defined(HAVE_DECL_RTPROT_BOOT) && HAVE_DECL_RTPROT_BOOT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_BOOT) == (3), "RTPROT_BOOT != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_BOOT 3
#endif
#if defined(RTPROT_STATIC) || (defined(HAVE_DECL_RTPROT_STATIC) && HAVE_DECL_RTPROT_STATIC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_STATIC) == (4), "RTPROT_STATIC != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_STATIC 4
#endif
#if defined(RTPROT_GATED) || (defined(HAVE_DECL_RTPROT_GATED) && HAVE_DECL_RTPROT_GATED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_GATED) == (8), "RTPROT_GATED != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_GATED 8
#endif
#if defined(RTPROT_RA) || (defined(HAVE_DECL_RTPROT_RA) && HAVE_DECL_RTPROT_RA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_RA) == (9), "RTPROT_RA != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_RA 9
#endif
#if defined(RTPROT_MRT) || (defined(HAVE_DECL_RTPROT_MRT) && HAVE_DECL_RTPROT_MRT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_MRT) == (10), "RTPROT_MRT != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_MRT 10
#endif
#if defined(RTPROT_ZEBRA) || (defined(HAVE_DECL_RTPROT_ZEBRA) && HAVE_DECL_RTPROT_ZEBRA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_ZEBRA) == (11), "RTPROT_ZEBRA != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_ZEBRA 11
#endif
#if defined(RTPROT_BIRD) || (defined(HAVE_DECL_RTPROT_BIRD) && HAVE_DECL_RTPROT_BIRD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_BIRD) == (12), "RTPROT_BIRD != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_BIRD 12
#endif
#if defined(RTPROT_DNROUTED) || (defined(HAVE_DECL_RTPROT_DNROUTED) && HAVE_DECL_RTPROT_DNROUTED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_DNROUTED) == (13), "RTPROT_DNROUTED != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_DNROUTED 13
#endif
#if defined(RTPROT_XORP) || (defined(HAVE_DECL_RTPROT_XORP) && HAVE_DECL_RTPROT_XORP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_XORP) == (14), "RTPROT_XORP != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_XORP 14
#endif
#if defined(RTPROT_NTK) || (defined(HAVE_DECL_RTPROT_NTK) && HAVE_DECL_RTPROT_NTK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_NTK) == (15), "RTPROT_NTK != 15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_NTK 15
#endif
#if defined(RTPROT_DHCP) || (defined(HAVE_DECL_RTPROT_DHCP) && HAVE_DECL_RTPROT_DHCP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_DHCP) == (16), "RTPROT_DHCP != 16");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_DHCP 16
#endif
#if defined(RTPROT_MROUTED) || (defined(HAVE_DECL_RTPROT_MROUTED) && HAVE_DECL_RTPROT_MROUTED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_MROUTED) == (17), "RTPROT_MROUTED != 17");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_MROUTED 17
#endif
#if defined(RTPROT_BABEL) || (defined(HAVE_DECL_RTPROT_BABEL) && HAVE_DECL_RTPROT_BABEL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_BABEL) == (42), "RTPROT_BABEL != 42");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_BABEL 42
#endif
#if defined(RTPROT_BGP) || (defined(HAVE_DECL_RTPROT_BGP) && HAVE_DECL_RTPROT_BGP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_BGP) == (186), "RTPROT_BGP != 186");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_BGP 186
#endif
#if defined(RTPROT_ISIS) || (defined(HAVE_DECL_RTPROT_ISIS) && HAVE_DECL_RTPROT_ISIS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_ISIS) == (187), "RTPROT_ISIS != 187");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_ISIS 187
#endif
#if defined(RTPROT_OSPF) || (defined(HAVE_DECL_RTPROT_OSPF) && HAVE_DECL_RTPROT_OSPF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_OSPF) == (188), "RTPROT_OSPF != 188");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_OSPF 188
#endif
#if defined(RTPROT_RIP) || (defined(HAVE_DECL_RTPROT_RIP) && HAVE_DECL_RTPROT_RIP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_RIP) == (189), "RTPROT_RIP != 189");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_RIP 189
#endif
#if defined(RTPROT_EIGRP) || (defined(HAVE_DECL_RTPROT_EIGRP) && HAVE_DECL_RTPROT_EIGRP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((RTPROT_EIGRP) == (192), "RTPROT_EIGRP != 192");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define RTPROT_EIGRP 192
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat routing_protocols in mpers mode

# else

static
const struct xlat routing_protocols[] = {

 XLAT(RTPROT_UNSPEC),
 XLAT(RTPROT_REDIRECT),
 XLAT(RTPROT_KERNEL),
 XLAT(RTPROT_BOOT),
 XLAT(RTPROT_STATIC),
 XLAT(RTPROT_GATED),
 XLAT(RTPROT_RA),
 XLAT(RTPROT_MRT),
 XLAT(RTPROT_ZEBRA),
 XLAT(RTPROT_BIRD),
 XLAT(RTPROT_DNROUTED),
 XLAT(RTPROT_XORP),
 XLAT(RTPROT_NTK),
 XLAT(RTPROT_DHCP),
 XLAT(RTPROT_MROUTED),
 XLAT(RTPROT_BABEL),
 XLAT(RTPROT_BGP),
 XLAT(RTPROT_ISIS),
 XLAT(RTPROT_OSPF),
 XLAT(RTPROT_RIP),
 XLAT(RTPROT_EIGRP),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
