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

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

#if defined(IFLA_UNSPEC) || (defined(HAVE_DECL_IFLA_UNSPEC) && HAVE_DECL_IFLA_UNSPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_UNSPEC) == (0), "IFLA_UNSPEC != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_UNSPEC 0
#endif
#if defined(IFLA_ADDRESS) || (defined(HAVE_DECL_IFLA_ADDRESS) && HAVE_DECL_IFLA_ADDRESS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_ADDRESS) == (1), "IFLA_ADDRESS != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_ADDRESS 1
#endif
#if defined(IFLA_BROADCAST) || (defined(HAVE_DECL_IFLA_BROADCAST) && HAVE_DECL_IFLA_BROADCAST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BROADCAST) == (2), "IFLA_BROADCAST != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BROADCAST 2
#endif
#if defined(IFLA_IFNAME) || (defined(HAVE_DECL_IFLA_IFNAME) && HAVE_DECL_IFLA_IFNAME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_IFNAME) == (3), "IFLA_IFNAME != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_IFNAME 3
#endif
#if defined(IFLA_MTU) || (defined(HAVE_DECL_IFLA_MTU) && HAVE_DECL_IFLA_MTU)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_MTU) == (4), "IFLA_MTU != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_MTU 4
#endif
#if defined(IFLA_LINK) || (defined(HAVE_DECL_IFLA_LINK) && HAVE_DECL_IFLA_LINK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_LINK) == (5), "IFLA_LINK != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_LINK 5
#endif
#if defined(IFLA_QDISC) || (defined(HAVE_DECL_IFLA_QDISC) && HAVE_DECL_IFLA_QDISC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_QDISC) == (6), "IFLA_QDISC != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_QDISC 6
#endif
#if defined(IFLA_STATS) || (defined(HAVE_DECL_IFLA_STATS) && HAVE_DECL_IFLA_STATS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_STATS) == (7), "IFLA_STATS != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_STATS 7
#endif
#if defined(IFLA_COST) || (defined(HAVE_DECL_IFLA_COST) && HAVE_DECL_IFLA_COST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_COST) == (8), "IFLA_COST != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_COST 8
#endif
#if defined(IFLA_PRIORITY) || (defined(HAVE_DECL_IFLA_PRIORITY) && HAVE_DECL_IFLA_PRIORITY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_PRIORITY) == (9), "IFLA_PRIORITY != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_PRIORITY 9
#endif
#if defined(IFLA_MASTER) || (defined(HAVE_DECL_IFLA_MASTER) && HAVE_DECL_IFLA_MASTER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_MASTER) == (10), "IFLA_MASTER != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_MASTER 10
#endif
#if defined(IFLA_WIRELESS) || (defined(HAVE_DECL_IFLA_WIRELESS) && HAVE_DECL_IFLA_WIRELESS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_WIRELESS) == (11), "IFLA_WIRELESS != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_WIRELESS 11
#endif
#if defined(IFLA_PROTINFO) || (defined(HAVE_DECL_IFLA_PROTINFO) && HAVE_DECL_IFLA_PROTINFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_PROTINFO) == (12), "IFLA_PROTINFO != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_PROTINFO 12
#endif
#if defined(IFLA_TXQLEN) || (defined(HAVE_DECL_IFLA_TXQLEN) && HAVE_DECL_IFLA_TXQLEN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_TXQLEN) == (13), "IFLA_TXQLEN != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_TXQLEN 13
#endif
#if defined(IFLA_MAP) || (defined(HAVE_DECL_IFLA_MAP) && HAVE_DECL_IFLA_MAP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_MAP) == (14), "IFLA_MAP != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_MAP 14
#endif
#if defined(IFLA_WEIGHT) || (defined(HAVE_DECL_IFLA_WEIGHT) && HAVE_DECL_IFLA_WEIGHT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_WEIGHT) == (15), "IFLA_WEIGHT != 15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_WEIGHT 15
#endif
#if defined(IFLA_OPERSTATE) || (defined(HAVE_DECL_IFLA_OPERSTATE) && HAVE_DECL_IFLA_OPERSTATE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_OPERSTATE) == (16), "IFLA_OPERSTATE != 16");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_OPERSTATE 16
#endif
#if defined(IFLA_LINKMODE) || (defined(HAVE_DECL_IFLA_LINKMODE) && HAVE_DECL_IFLA_LINKMODE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_LINKMODE) == (17), "IFLA_LINKMODE != 17");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_LINKMODE 17
#endif
#if defined(IFLA_LINKINFO) || (defined(HAVE_DECL_IFLA_LINKINFO) && HAVE_DECL_IFLA_LINKINFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_LINKINFO) == (18), "IFLA_LINKINFO != 18");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_LINKINFO 18
#endif
#if defined(IFLA_NET_NS_PID) || (defined(HAVE_DECL_IFLA_NET_NS_PID) && HAVE_DECL_IFLA_NET_NS_PID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_NET_NS_PID) == (19), "IFLA_NET_NS_PID != 19");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_NET_NS_PID 19
#endif
#if defined(IFLA_IFALIAS) || (defined(HAVE_DECL_IFLA_IFALIAS) && HAVE_DECL_IFLA_IFALIAS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_IFALIAS) == (20), "IFLA_IFALIAS != 20");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_IFALIAS 20
#endif
#if defined(IFLA_NUM_VF) || (defined(HAVE_DECL_IFLA_NUM_VF) && HAVE_DECL_IFLA_NUM_VF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_NUM_VF) == (21), "IFLA_NUM_VF != 21");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_NUM_VF 21
#endif
#if defined(IFLA_VFINFO_LIST) || (defined(HAVE_DECL_IFLA_VFINFO_LIST) && HAVE_DECL_IFLA_VFINFO_LIST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_VFINFO_LIST) == (22), "IFLA_VFINFO_LIST != 22");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_VFINFO_LIST 22
#endif
#if defined(IFLA_STATS64) || (defined(HAVE_DECL_IFLA_STATS64) && HAVE_DECL_IFLA_STATS64)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_STATS64) == (23), "IFLA_STATS64 != 23");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_STATS64 23
#endif
#if defined(IFLA_VF_PORTS) || (defined(HAVE_DECL_IFLA_VF_PORTS) && HAVE_DECL_IFLA_VF_PORTS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_VF_PORTS) == (24), "IFLA_VF_PORTS != 24");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_VF_PORTS 24
#endif
#if defined(IFLA_PORT_SELF) || (defined(HAVE_DECL_IFLA_PORT_SELF) && HAVE_DECL_IFLA_PORT_SELF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_PORT_SELF) == (25), "IFLA_PORT_SELF != 25");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_PORT_SELF 25
#endif
#if defined(IFLA_AF_SPEC) || (defined(HAVE_DECL_IFLA_AF_SPEC) && HAVE_DECL_IFLA_AF_SPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_AF_SPEC) == (26), "IFLA_AF_SPEC != 26");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_AF_SPEC 26
#endif
#if defined(IFLA_GROUP) || (defined(HAVE_DECL_IFLA_GROUP) && HAVE_DECL_IFLA_GROUP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_GROUP) == (27), "IFLA_GROUP != 27");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_GROUP 27
#endif
#if defined(IFLA_NET_NS_FD) || (defined(HAVE_DECL_IFLA_NET_NS_FD) && HAVE_DECL_IFLA_NET_NS_FD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_NET_NS_FD) == (28), "IFLA_NET_NS_FD != 28");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_NET_NS_FD 28
#endif
#if defined(IFLA_EXT_MASK) || (defined(HAVE_DECL_IFLA_EXT_MASK) && HAVE_DECL_IFLA_EXT_MASK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_EXT_MASK) == (29), "IFLA_EXT_MASK != 29");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_EXT_MASK 29
#endif
#if defined(IFLA_PROMISCUITY) || (defined(HAVE_DECL_IFLA_PROMISCUITY) && HAVE_DECL_IFLA_PROMISCUITY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_PROMISCUITY) == (30), "IFLA_PROMISCUITY != 30");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_PROMISCUITY 30
#endif
#if defined(IFLA_NUM_TX_QUEUES) || (defined(HAVE_DECL_IFLA_NUM_TX_QUEUES) && HAVE_DECL_IFLA_NUM_TX_QUEUES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_NUM_TX_QUEUES) == (31), "IFLA_NUM_TX_QUEUES != 31");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_NUM_TX_QUEUES 31
#endif
#if defined(IFLA_NUM_RX_QUEUES) || (defined(HAVE_DECL_IFLA_NUM_RX_QUEUES) && HAVE_DECL_IFLA_NUM_RX_QUEUES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_NUM_RX_QUEUES) == (32), "IFLA_NUM_RX_QUEUES != 32");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_NUM_RX_QUEUES 32
#endif
#if defined(IFLA_CARRIER) || (defined(HAVE_DECL_IFLA_CARRIER) && HAVE_DECL_IFLA_CARRIER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_CARRIER) == (33), "IFLA_CARRIER != 33");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_CARRIER 33
#endif
#if defined(IFLA_PHYS_PORT_ID) || (defined(HAVE_DECL_IFLA_PHYS_PORT_ID) && HAVE_DECL_IFLA_PHYS_PORT_ID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_PHYS_PORT_ID) == (34), "IFLA_PHYS_PORT_ID != 34");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_PHYS_PORT_ID 34
#endif
#if defined(IFLA_CARRIER_CHANGES) || (defined(HAVE_DECL_IFLA_CARRIER_CHANGES) && HAVE_DECL_IFLA_CARRIER_CHANGES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_CARRIER_CHANGES) == (35), "IFLA_CARRIER_CHANGES != 35");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_CARRIER_CHANGES 35
#endif
#if defined(IFLA_PHYS_SWITCH_ID) || (defined(HAVE_DECL_IFLA_PHYS_SWITCH_ID) && HAVE_DECL_IFLA_PHYS_SWITCH_ID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_PHYS_SWITCH_ID) == (36), "IFLA_PHYS_SWITCH_ID != 36");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_PHYS_SWITCH_ID 36
#endif
#if defined(IFLA_LINK_NETNSID) || (defined(HAVE_DECL_IFLA_LINK_NETNSID) && HAVE_DECL_IFLA_LINK_NETNSID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_LINK_NETNSID) == (37), "IFLA_LINK_NETNSID != 37");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_LINK_NETNSID 37
#endif
#if defined(IFLA_PHYS_PORT_NAME) || (defined(HAVE_DECL_IFLA_PHYS_PORT_NAME) && HAVE_DECL_IFLA_PHYS_PORT_NAME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_PHYS_PORT_NAME) == (38), "IFLA_PHYS_PORT_NAME != 38");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_PHYS_PORT_NAME 38
#endif
#if defined(IFLA_PROTO_DOWN) || (defined(HAVE_DECL_IFLA_PROTO_DOWN) && HAVE_DECL_IFLA_PROTO_DOWN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_PROTO_DOWN) == (39), "IFLA_PROTO_DOWN != 39");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_PROTO_DOWN 39
#endif
#if defined(IFLA_GSO_MAX_SEGS) || (defined(HAVE_DECL_IFLA_GSO_MAX_SEGS) && HAVE_DECL_IFLA_GSO_MAX_SEGS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_GSO_MAX_SEGS) == (40), "IFLA_GSO_MAX_SEGS != 40");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_GSO_MAX_SEGS 40
#endif
#if defined(IFLA_GSO_MAX_SIZE) || (defined(HAVE_DECL_IFLA_GSO_MAX_SIZE) && HAVE_DECL_IFLA_GSO_MAX_SIZE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_GSO_MAX_SIZE) == (41), "IFLA_GSO_MAX_SIZE != 41");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_GSO_MAX_SIZE 41
#endif
#if defined(IFLA_PAD) || (defined(HAVE_DECL_IFLA_PAD) && HAVE_DECL_IFLA_PAD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_PAD) == (42), "IFLA_PAD != 42");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_PAD 42
#endif
#if defined(IFLA_XDP) || (defined(HAVE_DECL_IFLA_XDP) && HAVE_DECL_IFLA_XDP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_XDP) == (43), "IFLA_XDP != 43");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_XDP 43
#endif
#if defined(IFLA_EVENT) || (defined(HAVE_DECL_IFLA_EVENT) && HAVE_DECL_IFLA_EVENT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_EVENT) == (44), "IFLA_EVENT != 44");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_EVENT 44
#endif
#if defined(IFLA_NEW_NETNSID) || (defined(HAVE_DECL_IFLA_NEW_NETNSID) && HAVE_DECL_IFLA_NEW_NETNSID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_NEW_NETNSID) == (45), "IFLA_NEW_NETNSID != 45");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_NEW_NETNSID 45
#endif
#if defined(IFLA_IF_NETNSID) || (defined(HAVE_DECL_IFLA_IF_NETNSID) && HAVE_DECL_IFLA_IF_NETNSID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_IF_NETNSID) == (46), "IFLA_IF_NETNSID != 46");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_IF_NETNSID 46
#endif
#if defined(IFLA_CARRIER_UP_COUNT) || (defined(HAVE_DECL_IFLA_CARRIER_UP_COUNT) && HAVE_DECL_IFLA_CARRIER_UP_COUNT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_CARRIER_UP_COUNT) == (47), "IFLA_CARRIER_UP_COUNT != 47");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_CARRIER_UP_COUNT 47
#endif
#if defined(IFLA_CARRIER_DOWN_COUNT) || (defined(HAVE_DECL_IFLA_CARRIER_DOWN_COUNT) && HAVE_DECL_IFLA_CARRIER_DOWN_COUNT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_CARRIER_DOWN_COUNT) == (48), "IFLA_CARRIER_DOWN_COUNT != 48");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_CARRIER_DOWN_COUNT 48
#endif
#if defined(IFLA_NEW_IFINDEX) || (defined(HAVE_DECL_IFLA_NEW_IFINDEX) && HAVE_DECL_IFLA_NEW_IFINDEX)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_NEW_IFINDEX) == (49), "IFLA_NEW_IFINDEX != 49");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_NEW_IFINDEX 49
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat rtnl_link_attrs in mpers mode

# else

static
const struct xlat rtnl_link_attrs[] = {
 XLAT(IFLA_UNSPEC),
 XLAT(IFLA_ADDRESS),
 XLAT(IFLA_BROADCAST),
 XLAT(IFLA_IFNAME),
 XLAT(IFLA_MTU),
 XLAT(IFLA_LINK),
 XLAT(IFLA_QDISC),
 XLAT(IFLA_STATS),
 XLAT(IFLA_COST),
 XLAT(IFLA_PRIORITY),
 XLAT(IFLA_MASTER),
 XLAT(IFLA_WIRELESS),
 XLAT(IFLA_PROTINFO),
 XLAT(IFLA_TXQLEN),
 XLAT(IFLA_MAP),
 XLAT(IFLA_WEIGHT),
 XLAT(IFLA_OPERSTATE),
 XLAT(IFLA_LINKMODE),
 XLAT(IFLA_LINKINFO),
 XLAT(IFLA_NET_NS_PID),
 XLAT(IFLA_IFALIAS),
 XLAT(IFLA_NUM_VF),
 XLAT(IFLA_VFINFO_LIST),
 XLAT(IFLA_STATS64),
 XLAT(IFLA_VF_PORTS),
 XLAT(IFLA_PORT_SELF),
 XLAT(IFLA_AF_SPEC),
 XLAT(IFLA_GROUP),
 XLAT(IFLA_NET_NS_FD),
 XLAT(IFLA_EXT_MASK),
 XLAT(IFLA_PROMISCUITY),
 XLAT(IFLA_NUM_TX_QUEUES),
 XLAT(IFLA_NUM_RX_QUEUES),
 XLAT(IFLA_CARRIER),
 XLAT(IFLA_PHYS_PORT_ID),
 XLAT(IFLA_CARRIER_CHANGES),
 XLAT(IFLA_PHYS_SWITCH_ID),
 XLAT(IFLA_LINK_NETNSID),
 XLAT(IFLA_PHYS_PORT_NAME),
 XLAT(IFLA_PROTO_DOWN),
 XLAT(IFLA_GSO_MAX_SEGS),
 XLAT(IFLA_GSO_MAX_SIZE),
 XLAT(IFLA_PAD),
 XLAT(IFLA_XDP),
 XLAT(IFLA_EVENT),
 XLAT(IFLA_NEW_NETNSID),
 XLAT(IFLA_IF_NETNSID),
 XLAT(IFLA_CARRIER_UP_COUNT),
 XLAT(IFLA_CARRIER_DOWN_COUNT),
 XLAT(IFLA_NEW_IFINDEX),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
