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

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

#if defined(IFLA_BRPORT_UNSPEC) || (defined(HAVE_DECL_IFLA_BRPORT_UNSPEC) && HAVE_DECL_IFLA_BRPORT_UNSPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_UNSPEC) == (0), "IFLA_BRPORT_UNSPEC != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_UNSPEC 0
#endif
#if defined(IFLA_BRPORT_STATE) || (defined(HAVE_DECL_IFLA_BRPORT_STATE) && HAVE_DECL_IFLA_BRPORT_STATE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_STATE) == (1), "IFLA_BRPORT_STATE != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_STATE 1
#endif
#if defined(IFLA_BRPORT_PRIORITY) || (defined(HAVE_DECL_IFLA_BRPORT_PRIORITY) && HAVE_DECL_IFLA_BRPORT_PRIORITY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_PRIORITY) == (2), "IFLA_BRPORT_PRIORITY != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_PRIORITY 2
#endif
#if defined(IFLA_BRPORT_COST) || (defined(HAVE_DECL_IFLA_BRPORT_COST) && HAVE_DECL_IFLA_BRPORT_COST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_COST) == (3), "IFLA_BRPORT_COST != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_COST 3
#endif
#if defined(IFLA_BRPORT_MODE) || (defined(HAVE_DECL_IFLA_BRPORT_MODE) && HAVE_DECL_IFLA_BRPORT_MODE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_MODE) == (4), "IFLA_BRPORT_MODE != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_MODE 4
#endif
#if defined(IFLA_BRPORT_GUARD) || (defined(HAVE_DECL_IFLA_BRPORT_GUARD) && HAVE_DECL_IFLA_BRPORT_GUARD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_GUARD) == (5), "IFLA_BRPORT_GUARD != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_GUARD 5
#endif
#if defined(IFLA_BRPORT_PROTECT) || (defined(HAVE_DECL_IFLA_BRPORT_PROTECT) && HAVE_DECL_IFLA_BRPORT_PROTECT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_PROTECT) == (6), "IFLA_BRPORT_PROTECT != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_FAST_LEAVE) == (7), "IFLA_BRPORT_FAST_LEAVE != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_FAST_LEAVE 7
#endif
#if defined(IFLA_BRPORT_LEARNING) || (defined(HAVE_DECL_IFLA_BRPORT_LEARNING) && HAVE_DECL_IFLA_BRPORT_LEARNING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_LEARNING) == (8), "IFLA_BRPORT_LEARNING != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_UNICAST_FLOOD) == (9), "IFLA_BRPORT_UNICAST_FLOOD != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_UNICAST_FLOOD 9
#endif
#if defined(IFLA_BRPORT_PROXYARP) || (defined(HAVE_DECL_IFLA_BRPORT_PROXYARP) && HAVE_DECL_IFLA_BRPORT_PROXYARP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_PROXYARP) == (10), "IFLA_BRPORT_PROXYARP != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_LEARNING_SYNC) == (11), "IFLA_BRPORT_LEARNING_SYNC != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_PROXYARP_WIFI) == (12), "IFLA_BRPORT_PROXYARP_WIFI != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_ROOT_ID) == (13), "IFLA_BRPORT_ROOT_ID != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_BRIDGE_ID) == (14), "IFLA_BRPORT_BRIDGE_ID != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_DESIGNATED_PORT) == (15), "IFLA_BRPORT_DESIGNATED_PORT != 15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_DESIGNATED_COST) == (16), "IFLA_BRPORT_DESIGNATED_COST != 16");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_DESIGNATED_COST 16
#endif
#if defined(IFLA_BRPORT_ID) || (defined(HAVE_DECL_IFLA_BRPORT_ID) && HAVE_DECL_IFLA_BRPORT_ID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_ID) == (17), "IFLA_BRPORT_ID != 17");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_ID 17
#endif
#if defined(IFLA_BRPORT_NO) || (defined(HAVE_DECL_IFLA_BRPORT_NO) && HAVE_DECL_IFLA_BRPORT_NO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_NO) == (18), "IFLA_BRPORT_NO != 18");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_TOPOLOGY_CHANGE_ACK) == (19), "IFLA_BRPORT_TOPOLOGY_CHANGE_ACK != 19");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_CONFIG_PENDING) == (20), "IFLA_BRPORT_CONFIG_PENDING != 20");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_MESSAGE_AGE_TIMER) == (21), "IFLA_BRPORT_MESSAGE_AGE_TIMER != 21");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_FORWARD_DELAY_TIMER) == (22), "IFLA_BRPORT_FORWARD_DELAY_TIMER != 22");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_HOLD_TIMER) == (23), "IFLA_BRPORT_HOLD_TIMER != 23");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_HOLD_TIMER 23
#endif
#if defined(IFLA_BRPORT_FLUSH) || (defined(HAVE_DECL_IFLA_BRPORT_FLUSH) && HAVE_DECL_IFLA_BRPORT_FLUSH)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_FLUSH) == (24), "IFLA_BRPORT_FLUSH != 24");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_MULTICAST_ROUTER) == (25), "IFLA_BRPORT_MULTICAST_ROUTER != 25");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_MULTICAST_ROUTER 25
#endif
#if defined(IFLA_BRPORT_PAD) || (defined(HAVE_DECL_IFLA_BRPORT_PAD) && HAVE_DECL_IFLA_BRPORT_PAD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_PAD) == (26), "IFLA_BRPORT_PAD != 26");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_MCAST_FLOOD) == (27), "IFLA_BRPORT_MCAST_FLOOD != 27");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_MCAST_TO_UCAST) == (28), "IFLA_BRPORT_MCAST_TO_UCAST != 28");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_VLAN_TUNNEL) == (29), "IFLA_BRPORT_VLAN_TUNNEL != 29");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# 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)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_BCAST_FLOOD) == (30), "IFLA_BRPORT_BCAST_FLOOD != 30");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_BCAST_FLOOD 30
#endif
#if defined(IFLA_BRPORT_GROUP_FWD_MASK) || (defined(HAVE_DECL_IFLA_BRPORT_GROUP_FWD_MASK) && HAVE_DECL_IFLA_BRPORT_GROUP_FWD_MASK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_GROUP_FWD_MASK) == (31), "IFLA_BRPORT_GROUP_FWD_MASK != 31");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_GROUP_FWD_MASK 31
#endif
#if defined(IFLA_BRPORT_NEIGH_SUPPRESS) || (defined(HAVE_DECL_IFLA_BRPORT_NEIGH_SUPPRESS) && HAVE_DECL_IFLA_BRPORT_NEIGH_SUPPRESS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_NEIGH_SUPPRESS) == (32), "IFLA_BRPORT_NEIGH_SUPPRESS != 32");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_NEIGH_SUPPRESS 32
#endif
#if defined(IFLA_BRPORT_ISOLATED) || (defined(HAVE_DECL_IFLA_BRPORT_ISOLATED) && HAVE_DECL_IFLA_BRPORT_ISOLATED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_ISOLATED) == (33), "IFLA_BRPORT_ISOLATED != 33");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_ISOLATED 33
#endif
#if defined(IFLA_BRPORT_BACKUP_PORT) || (defined(HAVE_DECL_IFLA_BRPORT_BACKUP_PORT) && HAVE_DECL_IFLA_BRPORT_BACKUP_PORT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IFLA_BRPORT_BACKUP_PORT) == (34), "IFLA_BRPORT_BACKUP_PORT != 34");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IFLA_BRPORT_BACKUP_PORT 34
#endif

#ifndef XLAT_MACROS_ONLY

# 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(IFLA_BRPORT_GROUP_FWD_MASK),
 XLAT(IFLA_BRPORT_NEIGH_SUPPRESS),
 XLAT(IFLA_BRPORT_ISOLATED),
 XLAT(IFLA_BRPORT_BACKUP_PORT),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
