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

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

#if defined(TCA_UNSPEC) || (defined(HAVE_DECL_TCA_UNSPEC) && HAVE_DECL_TCA_UNSPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_UNSPEC) == (0), "TCA_UNSPEC != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_UNSPEC 0
#endif
#if defined(TCA_KIND) || (defined(HAVE_DECL_TCA_KIND) && HAVE_DECL_TCA_KIND)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_KIND) == (1), "TCA_KIND != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_KIND 1
#endif
#if defined(TCA_OPTIONS) || (defined(HAVE_DECL_TCA_OPTIONS) && HAVE_DECL_TCA_OPTIONS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_OPTIONS) == (2), "TCA_OPTIONS != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_OPTIONS 2
#endif
#if defined(TCA_STATS) || (defined(HAVE_DECL_TCA_STATS) && HAVE_DECL_TCA_STATS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_STATS) == (3), "TCA_STATS != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_STATS 3
#endif
#if defined(TCA_XSTATS) || (defined(HAVE_DECL_TCA_XSTATS) && HAVE_DECL_TCA_XSTATS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_XSTATS) == (4), "TCA_XSTATS != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_XSTATS 4
#endif
#if defined(TCA_RATE) || (defined(HAVE_DECL_TCA_RATE) && HAVE_DECL_TCA_RATE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_RATE) == (5), "TCA_RATE != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_RATE 5
#endif
#if defined(TCA_FCNT) || (defined(HAVE_DECL_TCA_FCNT) && HAVE_DECL_TCA_FCNT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_FCNT) == (6), "TCA_FCNT != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_FCNT 6
#endif
#if defined(TCA_STATS2) || (defined(HAVE_DECL_TCA_STATS2) && HAVE_DECL_TCA_STATS2)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_STATS2) == (7), "TCA_STATS2 != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_STATS2 7
#endif
#if defined(TCA_STAB) || (defined(HAVE_DECL_TCA_STAB) && HAVE_DECL_TCA_STAB)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_STAB) == (8), "TCA_STAB != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_STAB 8
#endif
#if defined(TCA_PAD) || (defined(HAVE_DECL_TCA_PAD) && HAVE_DECL_TCA_PAD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_PAD) == (9), "TCA_PAD != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_PAD 9
#endif
#if defined(TCA_DUMP_INVISIBLE) || (defined(HAVE_DECL_TCA_DUMP_INVISIBLE) && HAVE_DECL_TCA_DUMP_INVISIBLE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_DUMP_INVISIBLE) == (10), "TCA_DUMP_INVISIBLE != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_DUMP_INVISIBLE 10
#endif
#if defined(TCA_CHAIN) || (defined(HAVE_DECL_TCA_CHAIN) && HAVE_DECL_TCA_CHAIN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_CHAIN) == (11), "TCA_CHAIN != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_CHAIN 11
#endif
#if defined(TCA_HW_OFFLOAD) || (defined(HAVE_DECL_TCA_HW_OFFLOAD) && HAVE_DECL_TCA_HW_OFFLOAD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_HW_OFFLOAD) == (12), "TCA_HW_OFFLOAD != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_HW_OFFLOAD 12
#endif
#if defined(TCA_INGRESS_BLOCK) || (defined(HAVE_DECL_TCA_INGRESS_BLOCK) && HAVE_DECL_TCA_INGRESS_BLOCK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_INGRESS_BLOCK) == (13), "TCA_INGRESS_BLOCK != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_INGRESS_BLOCK 13
#endif
#if defined(TCA_EGRESS_BLOCK) || (defined(HAVE_DECL_TCA_EGRESS_BLOCK) && HAVE_DECL_TCA_EGRESS_BLOCK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCA_EGRESS_BLOCK) == (14), "TCA_EGRESS_BLOCK != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCA_EGRESS_BLOCK 14
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat rtnl_tc_attrs in mpers mode

# else

static
const struct xlat rtnl_tc_attrs[] = {
 XLAT(TCA_UNSPEC),
 XLAT(TCA_KIND),
 XLAT(TCA_OPTIONS),
 XLAT(TCA_STATS),
 XLAT(TCA_XSTATS),
 XLAT(TCA_RATE),
 XLAT(TCA_FCNT),
 XLAT(TCA_STATS2),
 XLAT(TCA_STAB),
 XLAT(TCA_PAD),
 XLAT(TCA_DUMP_INVISIBLE),
 XLAT(TCA_CHAIN),
 XLAT(TCA_HW_OFFLOAD),
 XLAT(TCA_INGRESS_BLOCK),
 XLAT(TCA_EGRESS_BLOCK),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
