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

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

#if defined(IFLA_XDP_UNSPEC) || (defined(HAVE_DECL_IFLA_XDP_UNSPEC) && HAVE_DECL_IFLA_XDP_UNSPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_XDP_UNSPEC) == (0), "IFLA_XDP_UNSPEC != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_XDP_UNSPEC 0
#endif
#if defined(IFLA_XDP_FD) || (defined(HAVE_DECL_IFLA_XDP_FD) && HAVE_DECL_IFLA_XDP_FD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_XDP_FD) == (1), "IFLA_XDP_FD != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_XDP_FD 1
#endif
#if defined(IFLA_XDP_ATTACHED) || (defined(HAVE_DECL_IFLA_XDP_ATTACHED) && HAVE_DECL_IFLA_XDP_ATTACHED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_XDP_ATTACHED) == (2), "IFLA_XDP_ATTACHED != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_XDP_ATTACHED 2
#endif
#if defined(IFLA_XDP_FLAGS) || (defined(HAVE_DECL_IFLA_XDP_FLAGS) && HAVE_DECL_IFLA_XDP_FLAGS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_XDP_FLAGS) == (3), "IFLA_XDP_FLAGS != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_XDP_FLAGS 3
#endif
#if defined(IFLA_XDP_PROG_ID) || (defined(HAVE_DECL_IFLA_XDP_PROG_ID) && HAVE_DECL_IFLA_XDP_PROG_ID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_XDP_PROG_ID) == (4), "IFLA_XDP_PROG_ID != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_XDP_PROG_ID 4
#endif
#if defined(IFLA_XDP_DRV_PROG_ID) || (defined(HAVE_DECL_IFLA_XDP_DRV_PROG_ID) && HAVE_DECL_IFLA_XDP_DRV_PROG_ID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_XDP_DRV_PROG_ID) == (5), "IFLA_XDP_DRV_PROG_ID != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_XDP_DRV_PROG_ID 5
#endif
#if defined(IFLA_XDP_SKB_PROG_ID) || (defined(HAVE_DECL_IFLA_XDP_SKB_PROG_ID) && HAVE_DECL_IFLA_XDP_SKB_PROG_ID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_XDP_SKB_PROG_ID) == (6), "IFLA_XDP_SKB_PROG_ID != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_XDP_SKB_PROG_ID 6
#endif
#if defined(IFLA_XDP_HW_PROG_ID) || (defined(HAVE_DECL_IFLA_XDP_HW_PROG_ID) && HAVE_DECL_IFLA_XDP_HW_PROG_ID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_XDP_HW_PROG_ID) == (7), "IFLA_XDP_HW_PROG_ID != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_XDP_HW_PROG_ID 7
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat rtnl_ifla_xdp_attrs in mpers mode

# else

static
const struct xlat rtnl_ifla_xdp_attrs[] = {
 XLAT(IFLA_XDP_UNSPEC),
 XLAT(IFLA_XDP_FD),
 XLAT(IFLA_XDP_ATTACHED),
 XLAT(IFLA_XDP_FLAGS),
 XLAT(IFLA_XDP_PROG_ID),
 XLAT(IFLA_XDP_DRV_PROG_ID),
 XLAT(IFLA_XDP_SKB_PROG_ID),
 XLAT(IFLA_XDP_HW_PROG_ID),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
