/* Generated by ./xlat/gen.sh from ./xlat/rtnl_ifla_brport_attrs.in; do not edit. */
#if !(defined(IFLA_BRPORT_UNSPEC) || (defined(HAVE_DECL_IFLA_BRPORT_UNSPEC) && HAVE_DECL_IFLA_BRPORT_UNSPEC))
# define IFLA_BRPORT_UNSPEC 0
#endif
#if !(defined(IFLA_BRPORT_STATE) || (defined(HAVE_DECL_IFLA_BRPORT_STATE) && HAVE_DECL_IFLA_BRPORT_STATE))
# define IFLA_BRPORT_STATE 1
#endif
#if !(defined(IFLA_BRPORT_PRIORITY) || (defined(HAVE_DECL_IFLA_BRPORT_PRIORITY) && HAVE_DECL_IFLA_BRPORT_PRIORITY))
# define IFLA_BRPORT_PRIORITY 2
#endif
#if !(defined(IFLA_BRPORT_COST) || (defined(HAVE_DECL_IFLA_BRPORT_COST) && HAVE_DECL_IFLA_BRPORT_COST))
# define IFLA_BRPORT_COST 3
#endif
#if !(defined(IFLA_BRPORT_MODE) || (defined(HAVE_DECL_IFLA_BRPORT_MODE) && HAVE_DECL_IFLA_BRPORT_MODE))
# define IFLA_BRPORT_MODE 4
#endif
#if !(defined(IFLA_BRPORT_GUARD) || (defined(HAVE_DECL_IFLA_BRPORT_GUARD) && HAVE_DECL_IFLA_BRPORT_GUARD))
# define IFLA_BRPORT_GUARD 5
#endif
#if !(defined(IFLA_BRPORT_PROTECT) || (defined(HAVE_DECL_IFLA_BRPORT_PROTECT) && HAVE_DECL_IFLA_BRPORT_PROTECT))
# define IFLA_BRPORT_PROTECT 6
#endif
#if !(defined(IFLA_BRPORT_FAST_LEAVE) || (defined(HAVE_DECL_IFLA_BRPORT_FAST_LEAVE) && HAVE_DECL_IFLA_BRPORT_FAST_LEAVE))
# define IFLA_BRPORT_FAST_LEAVE 7
#endif
#if !(defined(IFLA_BRPORT_LEARNING) || (defined(HAVE_DECL_IFLA_BRPORT_LEARNING) && HAVE_DECL_IFLA_BRPORT_LEARNING))
# define IFLA_BRPORT_LEARNING 8
#endif
#if !(defined(IFLA_BRPORT_UNICAST_FLOOD) || (defined(HAVE_DECL_IFLA_BRPORT_UNICAST_FLOOD) && HAVE_DECL_IFLA_BRPORT_UNICAST_FLOOD))
# define IFLA_BRPORT_UNICAST_FLOOD 9
#endif
#if !(defined(IFLA_BRPORT_PROXYARP) || (defined(HAVE_DECL_IFLA_BRPORT_PROXYARP) && HAVE_DECL_IFLA_BRPORT_PROXYARP))
# define IFLA_BRPORT_PROXYARP 10
#endif
#if !(defined(IFLA_BRPORT_LEARNING_SYNC) || (defined(HAVE_DECL_IFLA_BRPORT_LEARNING_SYNC) && HAVE_DECL_IFLA_BRPORT_LEARNING_SYNC))
# define IFLA_BRPORT_LEARNING_SYNC 11
#endif
#if !(defined(IFLA_BRPORT_PROXYARP_WIFI) || (defined(HAVE_DECL_IFLA_BRPORT_PROXYARP_WIFI) && HAVE_DECL_IFLA_BRPORT_PROXYARP_WIFI))
# define IFLA_BRPORT_PROXYARP_WIFI 12
#endif
#if !(defined(IFLA_BRPORT_ROOT_ID) || (defined(HAVE_DECL_IFLA_BRPORT_ROOT_ID) && HAVE_DECL_IFLA_BRPORT_ROOT_ID))
# define IFLA_BRPORT_ROOT_ID 13
#endif
#if !(defined(IFLA_BRPORT_BRIDGE_ID) || (defined(HAVE_DECL_IFLA_BRPORT_BRIDGE_ID) && HAVE_DECL_IFLA_BRPORT_BRIDGE_ID))
# define IFLA_BRPORT_BRIDGE_ID 14
#endif
#if !(defined(IFLA_BRPORT_DESIGNATED_PORT) || (defined(HAVE_DECL_IFLA_BRPORT_DESIGNATED_PORT) && HAVE_DECL_IFLA_BRPORT_DESIGNATED_PORT))
# define IFLA_BRPORT_DESIGNATED_PORT 15
#endif
#if !(defined(IFLA_BRPORT_DESIGNATED_COST) || (defined(HAVE_DECL_IFLA_BRPORT_DESIGNATED_COST) && HAVE_DECL_IFLA_BRPORT_DESIGNATED_COST))
# define IFLA_BRPORT_DESIGNATED_COST 16
#endif
#if !(defined(IFLA_BRPORT_ID) || (defined(HAVE_DECL_IFLA_BRPORT_ID) && HAVE_DECL_IFLA_BRPORT_ID))
# define IFLA_BRPORT_ID 17
#endif
#if !(defined(IFLA_BRPORT_NO) || (defined(HAVE_DECL_IFLA_BRPORT_NO) && HAVE_DECL_IFLA_BRPORT_NO))
# define IFLA_BRPORT_NO 18
#endif
#if !(defined(IFLA_BRPORT_TOPOLOGY_CHANGE_ACK) || (defined(HAVE_DECL_IFLA_BRPORT_TOPOLOGY_CHANGE_ACK) && HAVE_DECL_IFLA_BRPORT_TOPOLOGY_CHANGE_ACK))
# define IFLA_BRPORT_TOPOLOGY_CHANGE_ACK 19
#endif
#if !(defined(IFLA_BRPORT_CONFIG_PENDING) || (defined(HAVE_DECL_IFLA_BRPORT_CONFIG_PENDING) && HAVE_DECL_IFLA_BRPORT_CONFIG_PENDING))
# define IFLA_BRPORT_CONFIG_PENDING 20
#endif
#if !(defined(IFLA_BRPORT_MESSAGE_AGE_TIMER) || (defined(HAVE_DECL_IFLA_BRPORT_MESSAGE_AGE_TIMER) && HAVE_DECL_IFLA_BRPORT_MESSAGE_AGE_TIMER))
# define IFLA_BRPORT_MESSAGE_AGE_TIMER 21
#endif
#if !(defined(IFLA_BRPORT_FORWARD_DELAY_TIMER) || (defined(HAVE_DECL_IFLA_BRPORT_FORWARD_DELAY_TIMER) && HAVE_DECL_IFLA_BRPORT_FORWARD_DELAY_TIMER))
# define IFLA_BRPORT_FORWARD_DELAY_TIMER 22
#endif
#if !(defined(IFLA_BRPORT_HOLD_TIMER) || (defined(HAVE_DECL_IFLA_BRPORT_HOLD_TIMER) && HAVE_DECL_IFLA_BRPORT_HOLD_TIMER))
# define IFLA_BRPORT_HOLD_TIMER 23
#endif
#if !(defined(IFLA_BRPORT_FLUSH) || (defined(HAVE_DECL_IFLA_BRPORT_FLUSH) && HAVE_DECL_IFLA_BRPORT_FLUSH))
# define IFLA_BRPORT_FLUSH 24
#endif
#if !(defined(IFLA_BRPORT_MULTICAST_ROUTER) || (defined(HAVE_DECL_IFLA_BRPORT_MULTICAST_ROUTER) && HAVE_DECL_IFLA_BRPORT_MULTICAST_ROUTER))
# define IFLA_BRPORT_MULTICAST_ROUTER 25
#endif
#if !(defined(IFLA_BRPORT_PAD) || (defined(HAVE_DECL_IFLA_BRPORT_PAD) && HAVE_DECL_IFLA_BRPORT_PAD))
# define IFLA_BRPORT_PAD 26
#endif
#if !(defined(IFLA_BRPORT_MCAST_FLOOD) || (defined(HAVE_DECL_IFLA_BRPORT_MCAST_FLOOD) && HAVE_DECL_IFLA_BRPORT_MCAST_FLOOD))
# define IFLA_BRPORT_MCAST_FLOOD 27
#endif
#if !(defined(IFLA_BRPORT_MCAST_TO_UCAST) || (defined(HAVE_DECL_IFLA_BRPORT_MCAST_TO_UCAST) && HAVE_DECL_IFLA_BRPORT_MCAST_TO_UCAST))
# define IFLA_BRPORT_MCAST_TO_UCAST 28
#endif
#if !(defined(IFLA_BRPORT_VLAN_TUNNEL) || (defined(HAVE_DECL_IFLA_BRPORT_VLAN_TUNNEL) && HAVE_DECL_IFLA_BRPORT_VLAN_TUNNEL))
# define IFLA_BRPORT_VLAN_TUNNEL 29
#endif
#if !(defined(IFLA_BRPORT_BCAST_FLOOD) || (defined(HAVE_DECL_IFLA_BRPORT_BCAST_FLOOD) && HAVE_DECL_IFLA_BRPORT_BCAST_FLOOD))
# define IFLA_BRPORT_BCAST_FLOOD 30
#endif

#ifdef IN_MPERS

# error static const struct xlat rtnl_ifla_brport_attrs in mpers mode

#else

static
const struct xlat rtnl_ifla_brport_attrs[] = {
 XLAT(IFLA_BRPORT_UNSPEC),
 XLAT(IFLA_BRPORT_STATE),
 XLAT(IFLA_BRPORT_PRIORITY),
 XLAT(IFLA_BRPORT_COST),
 XLAT(IFLA_BRPORT_MODE),
 XLAT(IFLA_BRPORT_GUARD),
 XLAT(IFLA_BRPORT_PROTECT),
 XLAT(IFLA_BRPORT_FAST_LEAVE),
 XLAT(IFLA_BRPORT_LEARNING),
 XLAT(IFLA_BRPORT_UNICAST_FLOOD),
 XLAT(IFLA_BRPORT_PROXYARP),
 XLAT(IFLA_BRPORT_LEARNING_SYNC),
 XLAT(IFLA_BRPORT_PROXYARP_WIFI),
 XLAT(IFLA_BRPORT_ROOT_ID),
 XLAT(IFLA_BRPORT_BRIDGE_ID),
 XLAT(IFLA_BRPORT_DESIGNATED_PORT),
 XLAT(IFLA_BRPORT_DESIGNATED_COST),
 XLAT(IFLA_BRPORT_ID),
 XLAT(IFLA_BRPORT_NO),
 XLAT(IFLA_BRPORT_TOPOLOGY_CHANGE_ACK),
 XLAT(IFLA_BRPORT_CONFIG_PENDING),
 XLAT(IFLA_BRPORT_MESSAGE_AGE_TIMER),
 XLAT(IFLA_BRPORT_FORWARD_DELAY_TIMER),
 XLAT(IFLA_BRPORT_HOLD_TIMER),
 XLAT(IFLA_BRPORT_FLUSH),
 XLAT(IFLA_BRPORT_MULTICAST_ROUTER),
 XLAT(IFLA_BRPORT_PAD),
 XLAT(IFLA_BRPORT_MCAST_FLOOD),
 XLAT(IFLA_BRPORT_MCAST_TO_UCAST),
 XLAT(IFLA_BRPORT_VLAN_TUNNEL),
 XLAT(IFLA_BRPORT_BCAST_FLOOD),
 XLAT_END
};

#endif /* !IN_MPERS */
