/* Generated by ./xlat/gen.sh from ./xlat/rtnl_link_attrs.in; do not edit. */
#if !(defined(IFLA_UNSPEC) || (defined(HAVE_DECL_IFLA_UNSPEC) && HAVE_DECL_IFLA_UNSPEC))
# define IFLA_UNSPEC 0
#endif
#if !(defined(IFLA_ADDRESS) || (defined(HAVE_DECL_IFLA_ADDRESS) && HAVE_DECL_IFLA_ADDRESS))
# define IFLA_ADDRESS 1
#endif
#if !(defined(IFLA_BROADCAST) || (defined(HAVE_DECL_IFLA_BROADCAST) && HAVE_DECL_IFLA_BROADCAST))
# define IFLA_BROADCAST 2
#endif
#if !(defined(IFLA_IFNAME) || (defined(HAVE_DECL_IFLA_IFNAME) && HAVE_DECL_IFLA_IFNAME))
# define IFLA_IFNAME 3
#endif
#if !(defined(IFLA_MTU) || (defined(HAVE_DECL_IFLA_MTU) && HAVE_DECL_IFLA_MTU))
# define IFLA_MTU 4
#endif
#if !(defined(IFLA_LINK) || (defined(HAVE_DECL_IFLA_LINK) && HAVE_DECL_IFLA_LINK))
# define IFLA_LINK 5
#endif
#if !(defined(IFLA_QDISC) || (defined(HAVE_DECL_IFLA_QDISC) && HAVE_DECL_IFLA_QDISC))
# define IFLA_QDISC 6
#endif
#if !(defined(IFLA_STATS) || (defined(HAVE_DECL_IFLA_STATS) && HAVE_DECL_IFLA_STATS))
# define IFLA_STATS 7
#endif
#if !(defined(IFLA_COST) || (defined(HAVE_DECL_IFLA_COST) && HAVE_DECL_IFLA_COST))
# define IFLA_COST 8
#endif
#if !(defined(IFLA_PRIORITY) || (defined(HAVE_DECL_IFLA_PRIORITY) && HAVE_DECL_IFLA_PRIORITY))
# define IFLA_PRIORITY 9
#endif
#if !(defined(IFLA_MASTER) || (defined(HAVE_DECL_IFLA_MASTER) && HAVE_DECL_IFLA_MASTER))
# define IFLA_MASTER 10
#endif
#if !(defined(IFLA_WIRELESS) || (defined(HAVE_DECL_IFLA_WIRELESS) && HAVE_DECL_IFLA_WIRELESS))
# define IFLA_WIRELESS 11
#endif
#if !(defined(IFLA_PROTINFO) || (defined(HAVE_DECL_IFLA_PROTINFO) && HAVE_DECL_IFLA_PROTINFO))
# define IFLA_PROTINFO 12
#endif
#if !(defined(IFLA_TXQLEN) || (defined(HAVE_DECL_IFLA_TXQLEN) && HAVE_DECL_IFLA_TXQLEN))
# define IFLA_TXQLEN 13
#endif
#if !(defined(IFLA_MAP) || (defined(HAVE_DECL_IFLA_MAP) && HAVE_DECL_IFLA_MAP))
# define IFLA_MAP 14
#endif
#if !(defined(IFLA_WEIGHT) || (defined(HAVE_DECL_IFLA_WEIGHT) && HAVE_DECL_IFLA_WEIGHT))
# define IFLA_WEIGHT 15
#endif
#if !(defined(IFLA_OPERSTATE) || (defined(HAVE_DECL_IFLA_OPERSTATE) && HAVE_DECL_IFLA_OPERSTATE))
# define IFLA_OPERSTATE 16
#endif
#if !(defined(IFLA_LINKMODE) || (defined(HAVE_DECL_IFLA_LINKMODE) && HAVE_DECL_IFLA_LINKMODE))
# define IFLA_LINKMODE 17
#endif
#if !(defined(IFLA_LINKINFO) || (defined(HAVE_DECL_IFLA_LINKINFO) && HAVE_DECL_IFLA_LINKINFO))
# define IFLA_LINKINFO 18
#endif
#if !(defined(IFLA_NET_NS_PID) || (defined(HAVE_DECL_IFLA_NET_NS_PID) && HAVE_DECL_IFLA_NET_NS_PID))
# define IFLA_NET_NS_PID 19
#endif
#if !(defined(IFLA_IFALIAS) || (defined(HAVE_DECL_IFLA_IFALIAS) && HAVE_DECL_IFLA_IFALIAS))
# define IFLA_IFALIAS 20
#endif
#if !(defined(IFLA_NUM_VF) || (defined(HAVE_DECL_IFLA_NUM_VF) && HAVE_DECL_IFLA_NUM_VF))
# define IFLA_NUM_VF 21
#endif
#if !(defined(IFLA_VFINFO_LIST) || (defined(HAVE_DECL_IFLA_VFINFO_LIST) && HAVE_DECL_IFLA_VFINFO_LIST))
# define IFLA_VFINFO_LIST 22
#endif
#if !(defined(IFLA_STATS64) || (defined(HAVE_DECL_IFLA_STATS64) && HAVE_DECL_IFLA_STATS64))
# define IFLA_STATS64 23
#endif
#if !(defined(IFLA_VF_PORTS) || (defined(HAVE_DECL_IFLA_VF_PORTS) && HAVE_DECL_IFLA_VF_PORTS))
# define IFLA_VF_PORTS 24
#endif
#if !(defined(IFLA_PORT_SELF) || (defined(HAVE_DECL_IFLA_PORT_SELF) && HAVE_DECL_IFLA_PORT_SELF))
# define IFLA_PORT_SELF 25
#endif
#if !(defined(IFLA_AF_SPEC) || (defined(HAVE_DECL_IFLA_AF_SPEC) && HAVE_DECL_IFLA_AF_SPEC))
# define IFLA_AF_SPEC 26
#endif
#if !(defined(IFLA_GROUP) || (defined(HAVE_DECL_IFLA_GROUP) && HAVE_DECL_IFLA_GROUP))
# define IFLA_GROUP 27
#endif
#if !(defined(IFLA_NET_NS_FD) || (defined(HAVE_DECL_IFLA_NET_NS_FD) && HAVE_DECL_IFLA_NET_NS_FD))
# define IFLA_NET_NS_FD 28
#endif
#if !(defined(IFLA_EXT_MASK) || (defined(HAVE_DECL_IFLA_EXT_MASK) && HAVE_DECL_IFLA_EXT_MASK))
# define IFLA_EXT_MASK 29
#endif
#if !(defined(IFLA_PROMISCUITY) || (defined(HAVE_DECL_IFLA_PROMISCUITY) && HAVE_DECL_IFLA_PROMISCUITY))
# define IFLA_PROMISCUITY 30
#endif
#if !(defined(IFLA_NUM_TX_QUEUES) || (defined(HAVE_DECL_IFLA_NUM_TX_QUEUES) && HAVE_DECL_IFLA_NUM_TX_QUEUES))
# 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))
# define IFLA_NUM_RX_QUEUES 32
#endif
#if !(defined(IFLA_CARRIER) || (defined(HAVE_DECL_IFLA_CARRIER) && HAVE_DECL_IFLA_CARRIER))
# define IFLA_CARRIER 33
#endif
#if !(defined(IFLA_PHYS_PORT_ID) || (defined(HAVE_DECL_IFLA_PHYS_PORT_ID) && HAVE_DECL_IFLA_PHYS_PORT_ID))
# define IFLA_PHYS_PORT_ID 34
#endif
#if !(defined(IFLA_CARRIER_CHANGES) || (defined(HAVE_DECL_IFLA_CARRIER_CHANGES) && HAVE_DECL_IFLA_CARRIER_CHANGES))
# 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))
# define IFLA_PHYS_SWITCH_ID 36
#endif
#if !(defined(IFLA_LINK_NETNSID) || (defined(HAVE_DECL_IFLA_LINK_NETNSID) && HAVE_DECL_IFLA_LINK_NETNSID))
# 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))
# define IFLA_PHYS_PORT_NAME 38
#endif
#if !(defined(IFLA_PROTO_DOWN) || (defined(HAVE_DECL_IFLA_PROTO_DOWN) && HAVE_DECL_IFLA_PROTO_DOWN))
# 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))
# 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))
# define IFLA_GSO_MAX_SIZE 41
#endif
#if !(defined(IFLA_PAD) || (defined(HAVE_DECL_IFLA_PAD) && HAVE_DECL_IFLA_PAD))
# define IFLA_PAD 42
#endif
#if !(defined(IFLA_XDP) || (defined(HAVE_DECL_IFLA_XDP) && HAVE_DECL_IFLA_XDP))
# define IFLA_XDP 43
#endif
#if !(defined(IFLA_EVENT) || (defined(HAVE_DECL_IFLA_EVENT) && HAVE_DECL_IFLA_EVENT))
# define IFLA_EVENT 44
#endif
#if !(defined(IFLA_NEW_NETNSID) || (defined(HAVE_DECL_IFLA_NEW_NETNSID) && HAVE_DECL_IFLA_NEW_NETNSID))
# define IFLA_NEW_NETNSID 45
#endif
#if !(defined(IFLA_IF_NETNSID) || (defined(HAVE_DECL_IFLA_IF_NETNSID) && HAVE_DECL_IFLA_IF_NETNSID))
# 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))
# 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))
# define IFLA_CARRIER_DOWN_COUNT 48
#endif
#if !(defined(IFLA_NEW_IFINDEX) || (defined(HAVE_DECL_IFLA_NEW_IFINDEX) && HAVE_DECL_IFLA_NEW_IFINDEX))
# define IFLA_NEW_IFINDEX 49
#endif

#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 */
