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

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

#if defined(PACKET_HOST) || (defined(HAVE_DECL_PACKET_HOST) && HAVE_DECL_PACKET_HOST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PACKET_HOST) == (0), "PACKET_HOST != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PACKET_HOST 0
#endif
#if defined(PACKET_BROADCAST) || (defined(HAVE_DECL_PACKET_BROADCAST) && HAVE_DECL_PACKET_BROADCAST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PACKET_BROADCAST) == (1), "PACKET_BROADCAST != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PACKET_BROADCAST 1
#endif
#if defined(PACKET_MULTICAST) || (defined(HAVE_DECL_PACKET_MULTICAST) && HAVE_DECL_PACKET_MULTICAST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PACKET_MULTICAST) == (2), "PACKET_MULTICAST != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PACKET_MULTICAST 2
#endif
#if defined(PACKET_OTHERHOST) || (defined(HAVE_DECL_PACKET_OTHERHOST) && HAVE_DECL_PACKET_OTHERHOST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PACKET_OTHERHOST) == (3), "PACKET_OTHERHOST != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PACKET_OTHERHOST 3
#endif
#if defined(PACKET_OUTGOING) || (defined(HAVE_DECL_PACKET_OUTGOING) && HAVE_DECL_PACKET_OUTGOING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PACKET_OUTGOING) == (4), "PACKET_OUTGOING != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PACKET_OUTGOING 4
#endif
#if defined(PACKET_LOOPBACK) || (defined(HAVE_DECL_PACKET_LOOPBACK) && HAVE_DECL_PACKET_LOOPBACK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PACKET_LOOPBACK) == (5), "PACKET_LOOPBACK != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PACKET_LOOPBACK 5
#endif
#if defined(PACKET_USER) || (defined(HAVE_DECL_PACKET_USER) && HAVE_DECL_PACKET_USER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PACKET_USER) == (6), "PACKET_USER != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PACKET_USER 6
#endif
#if defined(PACKET_KERNEL) || (defined(HAVE_DECL_PACKET_KERNEL) && HAVE_DECL_PACKET_KERNEL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PACKET_KERNEL) == (7), "PACKET_KERNEL != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PACKET_KERNEL 7
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat af_packet_types in mpers mode

# else

static
const struct xlat af_packet_types[] = {
 [PACKET_HOST] = XLAT(PACKET_HOST),
 [PACKET_BROADCAST] = XLAT(PACKET_BROADCAST),
 [PACKET_MULTICAST] = XLAT(PACKET_MULTICAST),
 [PACKET_OTHERHOST] = XLAT(PACKET_OTHERHOST),
 [PACKET_OUTGOING] = XLAT(PACKET_OUTGOING),
 [PACKET_LOOPBACK] = XLAT(PACKET_LOOPBACK),
 [PACKET_USER] = XLAT(PACKET_USER),
 [PACKET_KERNEL] = XLAT(PACKET_KERNEL),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
