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

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

#if defined(XDP_MMAP_OFFSETS) || (defined(HAVE_DECL_XDP_MMAP_OFFSETS) && HAVE_DECL_XDP_MMAP_OFFSETS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XDP_MMAP_OFFSETS) == (1), "XDP_MMAP_OFFSETS != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XDP_MMAP_OFFSETS 1
#endif
#if defined(XDP_RX_RING) || (defined(HAVE_DECL_XDP_RX_RING) && HAVE_DECL_XDP_RX_RING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XDP_RX_RING) == (2), "XDP_RX_RING != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XDP_RX_RING 2
#endif
#if defined(XDP_TX_RING) || (defined(HAVE_DECL_XDP_TX_RING) && HAVE_DECL_XDP_TX_RING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XDP_TX_RING) == (3), "XDP_TX_RING != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XDP_TX_RING 3
#endif
#if defined(XDP_UMEM_REG) || (defined(HAVE_DECL_XDP_UMEM_REG) && HAVE_DECL_XDP_UMEM_REG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XDP_UMEM_REG) == (4), "XDP_UMEM_REG != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XDP_UMEM_REG 4
#endif
#if defined(XDP_UMEM_FILL_RING) || (defined(HAVE_DECL_XDP_UMEM_FILL_RING) && HAVE_DECL_XDP_UMEM_FILL_RING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XDP_UMEM_FILL_RING) == (5), "XDP_UMEM_FILL_RING != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XDP_UMEM_FILL_RING 5
#endif
#if defined(XDP_UMEM_COMPLETION_RING) || (defined(HAVE_DECL_XDP_UMEM_COMPLETION_RING) && HAVE_DECL_XDP_UMEM_COMPLETION_RING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XDP_UMEM_COMPLETION_RING) == (6), "XDP_UMEM_COMPLETION_RING != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XDP_UMEM_COMPLETION_RING 6
#endif
#if defined(XDP_STATISTICS) || (defined(HAVE_DECL_XDP_STATISTICS) && HAVE_DECL_XDP_STATISTICS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((XDP_STATISTICS) == (7), "XDP_STATISTICS != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define XDP_STATISTICS 7
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat sock_xdp_options in mpers mode

# else

static
const struct xlat sock_xdp_options[] = {
 [XDP_MMAP_OFFSETS] = XLAT(XDP_MMAP_OFFSETS),
 [XDP_RX_RING] = XLAT(XDP_RX_RING),
 [XDP_TX_RING] = XLAT(XDP_TX_RING),
 [XDP_UMEM_REG] = XLAT(XDP_UMEM_REG),
 [XDP_UMEM_FILL_RING] = XLAT(XDP_UMEM_FILL_RING),
 [XDP_UMEM_COMPLETION_RING] = XLAT(XDP_UMEM_COMPLETION_RING),
 [XDP_STATISTICS] = XLAT(XDP_STATISTICS),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
