+ # Netlink attributes not associated with ifupdown2
+ # attributes are left commented-out for a future use
+ # and kept in order :)
+ _ifla_br_attributes_map = (
+ # Link.IFLA_BR_UNSPEC,
+ ('bridge-fd', Link.IFLA_BR_FORWARD_DELAY),
+ ('bridge-hello', Link.IFLA_BR_HELLO_TIME),
+ ('bridge-maxage', Link.IFLA_BR_MAX_AGE),
+ ('bridge-ageing', Link.IFLA_BR_AGEING_TIME),
+ ('bridge-stp', Link.IFLA_BR_STP_STATE),
+ ('bridge-bridgeprio', Link.IFLA_BR_PRIORITY),
+ ('bridge-vlan-aware', Link.IFLA_BR_VLAN_FILTERING),
+ ('bridge-vlan-protocol', Link.IFLA_BR_VLAN_PROTOCOL),
+ # Link.IFLA_BR_GROUP_FWD_MASK,
+ # Link.IFLA_BR_ROOT_ID,
+ # Link.IFLA_BR_BRIDGE_ID,
+ # Link.IFLA_BR_ROOT_PORT,
+ # (Link.IFLA_BR_ROOT_PATH_COST,,
+ # Link.IFLA_BR_TOPOLOGY_CHANGE,
+ # Link.IFLA_BR_TOPOLOGY_CHANGE_DETECTED,
+ # Link.IFLA_BR_HELLO_TIMER,
+ # Link.IFLA_BR_TCN_TIMER,
+ # Link.IFLA_BR_TOPOLOGY_CHANGE_TIMER,
+ # Link.IFLA_BR_GC_TIMER,
+ # Link.IFLA_BR_GROUP_ADDR,
+ # Link.IFLA_BR_FDB_FLUSH,
+ ('bridge-mcrouter', Link.IFLA_BR_MCAST_ROUTER),
+ #('bridge-mcsnoop', Link.IFLA_BR_MCAST_SNOOPING), # requires special handling so we won't loop on this attr
+ ('bridge-mcqifaddr', Link.IFLA_BR_MCAST_QUERY_USE_IFADDR),
+ ('bridge-mcquerier', Link.IFLA_BR_MCAST_QUERIER),
+ ('bridge-hashel', Link.IFLA_BR_MCAST_HASH_ELASTICITY),
+ ('bridge-hashmax', Link.IFLA_BR_MCAST_HASH_MAX),
+ ('bridge-mclmc', Link.IFLA_BR_MCAST_LAST_MEMBER_CNT),
+ ('bridge-mcsqc', Link.IFLA_BR_MCAST_STARTUP_QUERY_CNT),
+ ('bridge-mclmi', Link.IFLA_BR_MCAST_LAST_MEMBER_INTVL),
+ ('bridge-mcmi', Link.IFLA_BR_MCAST_MEMBERSHIP_INTVL),
+ ('bridge-mcqpi', Link.IFLA_BR_MCAST_QUERIER_INTVL),
+ ('bridge-mcqi', Link.IFLA_BR_MCAST_QUERY_INTVL),
+ ('bridge-mcqri', Link.IFLA_BR_MCAST_QUERY_RESPONSE_INTVL),
+ ('bridge-mcsqi', Link.IFLA_BR_MCAST_STARTUP_QUERY_INTVL),
+ # Link.IFLA_BR_NF_CALL_IPTABLES,
+ # Link.IFLA_BR_NF_CALL_IP6TABLES,
+ # Link.IFLA_BR_NF_CALL_ARPTABLES,
+ # Link.IFLA_BR_VLAN_DEFAULT_PVID,
+ # Link.IFLA_BR_PAD,
+ # (Link.IFLA_BR_VLAN_STATS_ENABLED, 'bridge-vlan-stats'), # already dealt with, in a separate loop
+ ('bridge-igmp-version', Link.IFLA_BR_MCAST_IGMP_VERSION, ),
+ ('bridge-mcstats', Link.IFLA_BR_MCAST_STATS_ENABLED),
+ ('bridge-mld-version', Link.IFLA_BR_MCAST_MLD_VERSION)
+ )
+ # 'bridge-vlan-stats & bridge-mcstat are commented out even though, today
+ # they are supported. It is done this way because this dictionary is used
+ # in a loop, but these attributes require additional work. Thus they are
+ # excluded from this loop without overhead.
+
+ # we are still using the old linkCache we need an easy way
+ # to use this cache with the new full-netlink approach
+ _ifla_br_attributes_old_cache_key_map = dict(
+ (
+ (Link.IFLA_BR_FORWARD_DELAY, 'fd'),
+ (Link.IFLA_BR_HELLO_TIME, 'hello'),
+ (Link.IFLA_BR_MAX_AGE, 'maxage'),
+ (Link.IFLA_BR_AGEING_TIME, 'ageing'),
+ (Link.IFLA_BR_STP_STATE, 'stp'),
+ (Link.IFLA_BR_PRIORITY, 'bridgeprio'),
+ (Link.IFLA_BR_VLAN_FILTERING, 'vlan_filtering'),
+ (Link.IFLA_BR_VLAN_PROTOCOL, 'vlan-protocol'),
+ (Link.IFLA_BR_MCAST_ROUTER, 'mcrouter'),
+ (Link.IFLA_BR_MCAST_SNOOPING, 'mcsnoop'),
+ (Link.IFLA_BR_MCAST_QUERY_USE_IFADDR, 'mcqifaddr'),
+ (Link.IFLA_BR_MCAST_QUERIER, 'mcquerier'),
+ (Link.IFLA_BR_MCAST_HASH_ELASTICITY, 'hashel'),
+ (Link.IFLA_BR_MCAST_HASH_MAX, 'hashmax'),
+ (Link.IFLA_BR_MCAST_LAST_MEMBER_CNT, 'mclmc'),
+ (Link.IFLA_BR_MCAST_STARTUP_QUERY_CNT, 'mcsqc'),
+ (Link.IFLA_BR_MCAST_LAST_MEMBER_INTVL, 'mclmi'),
+ (Link.IFLA_BR_MCAST_MEMBERSHIP_INTVL, 'mcmi'),
+ (Link.IFLA_BR_MCAST_QUERIER_INTVL, 'mcqpi'),
+ (Link.IFLA_BR_MCAST_QUERY_INTVL, 'mcqi'),
+ (Link.IFLA_BR_MCAST_QUERY_RESPONSE_INTVL, 'mcqri'),
+ (Link.IFLA_BR_MCAST_STARTUP_QUERY_INTVL, 'mcsqi'),
+ (Link.IFLA_BR_VLAN_STATS_ENABLED, 'vlan-stats'),
+ (Link.IFLA_BR_MCAST_STATS_ENABLED, 'mcstats'),
+ (Link.IFLA_BR_MCAST_IGMP_VERSION, 'igmp-version'),
+ (Link.IFLA_BR_MCAST_MLD_VERSION, 'mld-version')
+ )
+ )
+
+ _ifla_br_attributes_translate_user_config_to_netlink_map = dict(
+ (
+ # Link.IFLA_BR_UNSPEC,
+ (Link.IFLA_BR_FORWARD_DELAY, lambda x: int(x) * 100),
+ (Link.IFLA_BR_HELLO_TIME, lambda x: int(x) * 100),
+ (Link.IFLA_BR_MAX_AGE, lambda x: int(x) * 100),
+ (Link.IFLA_BR_AGEING_TIME, lambda x: int(x) * 100),
+ # Link.IFLA_BR_STP_STATE, # STP is treated outside the loop
+ (Link.IFLA_BR_PRIORITY, int),
+ (Link.IFLA_BR_VLAN_FILTERING, utils.get_boolean_from_string),
+ (Link.IFLA_BR_VLAN_PROTOCOL, str),
+ # Link.IFLA_BR_GROUP_FWD_MASK,
+ # Link.IFLA_BR_ROOT_ID,
+ # Link.IFLA_BR_BRIDGE_ID,
+ # Link.IFLA_BR_ROOT_PORT,
+ # Link.IFLA_BR_ROOT_PATH_COST,
+ # Link.IFLA_BR_TOPOLOGY_CHANGE,
+ # Link.IFLA_BR_TOPOLOGY_CHANGE_DETECTED,
+ # Link.IFLA_BR_HELLO_TIMER,
+ # Link.IFLA_BR_TCN_TIMER,
+ # Link.IFLA_BR_TOPOLOGY_CHANGE_TIMER,
+ # Link.IFLA_BR_GC_TIMER,
+ # Link.IFLA_BR_GROUP_ADDR,
+ # Link.IFLA_BR_FDB_FLUSH,
+ (Link.IFLA_BR_MCAST_ROUTER, utils.get_int_from_boolean_and_string),
+ (Link.IFLA_BR_MCAST_SNOOPING, utils.get_boolean_from_string),
+ (Link.IFLA_BR_MCAST_QUERY_USE_IFADDR, utils.get_boolean_from_string),
+ (Link.IFLA_BR_MCAST_QUERIER, utils.get_boolean_from_string),
+ (Link.IFLA_BR_MCAST_HASH_ELASTICITY, int),
+ (Link.IFLA_BR_MCAST_HASH_MAX, int),
+ (Link.IFLA_BR_MCAST_LAST_MEMBER_CNT, int),
+ (Link.IFLA_BR_MCAST_STARTUP_QUERY_CNT, int),
+ (Link.IFLA_BR_MCAST_LAST_MEMBER_INTVL, lambda x: int(x) * 100),
+ (Link.IFLA_BR_MCAST_MEMBERSHIP_INTVL, lambda x: int(x) * 100),
+ (Link.IFLA_BR_MCAST_QUERIER_INTVL, lambda x: int(x) * 100),
+ (Link.IFLA_BR_MCAST_QUERY_INTVL, lambda x: int(x) * 100),
+ (Link.IFLA_BR_MCAST_QUERY_RESPONSE_INTVL, lambda x: int(x) * 100),
+ (Link.IFLA_BR_MCAST_STARTUP_QUERY_INTVL, lambda x: int(x) * 100),
+ # Link.IFLA_BR_NF_CALL_IPTABLES,
+ # Link.IFLA_BR_NF_CALL_IP6TABLES,
+ # Link.IFLA_BR_NF_CALL_ARPTABLES,
+ # Link.IFLA_BR_VLAN_DEFAULT_PVID,
+ # Link.IFLA_BR_PAD,
+ (Link.IFLA_BR_VLAN_STATS_ENABLED, utils.get_boolean_from_string),
+ (Link.IFLA_BR_MCAST_IGMP_VERSION, int),
+ (Link.IFLA_BR_MCAST_STATS_ENABLED, utils.get_boolean_from_string),
+ (Link.IFLA_BR_MCAST_MLD_VERSION, int)
+ )
+ )
+
+ _ifla_brport_attributes_map = (
+ # Link.IFLA_BRPORT_UNSPEC,
+ # Link.IFLA_BRPORT_STATE,
+ ('bridge-portprios', Link.IFLA_BRPORT_PRIORITY),
+ ('bridge-pathcosts', Link.IFLA_BRPORT_COST),
+ # Link.IFLA_BRPORT_MODE,
+ # Link.IFLA_BRPORT_GUARD,
+ # Link.IFLA_BRPORT_PROTECT,
+ ('bridge-portmcfl', Link.IFLA_BRPORT_FAST_LEAVE),
+ ('bridge-learning', Link.IFLA_BRPORT_LEARNING),
+ ('bridge-unicast-flood', Link.IFLA_BRPORT_UNICAST_FLOOD),
+ # Link.IFLA_BRPORT_PROXYARP,
+ # Link.IFLA_BRPORT_LEARNING_SYNC,
+ # Link.IFLA_BRPORT_PROXYARP_WIFI,
+ # Link.IFLA_BRPORT_ROOT_ID,
+ # Link.IFLA_BRPORT_BRIDGE_ID,
+ # Link.IFLA_BRPORT_DESIGNATED_PORT,
+ # Link.IFLA_BRPORT_DESIGNATED_COST,
+ # Link.IFLA_BRPORT_ID,
+ # Link.IFLA_BRPORT_NO,
+ # Link.IFLA_BRPORT_TOPOLOGY_CHANGE_ACK,
+ # Link.IFLA_BRPORT_CONFIG_PENDING,
+ # Link.IFLA_BRPORT_MESSAGE_AGE_TIMER,
+ # Link.IFLA_BRPORT_FORWARD_DELAY_TIMER,
+ # Link.IFLA_BRPORT_HOLD_TIMER,
+ # Link.IFLA_BRPORT_FLUSH,
+ ('bridge-portmcrouter', Link.IFLA_BRPORT_MULTICAST_ROUTER),
+ # Link.IFLA_BRPORT_PAD,
+ ('bridge-multicast-flood', Link.IFLA_BRPORT_MCAST_FLOOD),
+ # Link.IFLA_BRPORT_MCAST_TO_UCAST,
+ # Link.IFLA_BRPORT_VLAN_TUNNEL,
+ # Link.IFLA_BRPORT_BCAST_FLOOD
+ ('bridge-l2protocol-tunnel', Link.IFLA_BRPORT_GROUP_FWD_MASK),
+ # Link.IFLA_BRPORT_PEER_LINK,
+ # Link.IFLA_BRPORT_DUAL_LINK,
+ ('bridge-arp-nd-suppress', Link.IFLA_BRPORT_ARP_SUPPRESS),
+ )
+
+ _ifla_brport_multicast_router_dict_to_int = {
+ 'disabled': 0,
+ '0': 0,
+ 'no': 0,
+ 'automatic': 1,
+ '1': 1,
+ 'yes': 1,
+ 'enabled': 2,
+ '2': 2,
+ }
+
+ # callable to translate <interface-yes-no-0-1-list> to netlink value
+ _ifla_brport_attributes_translate_user_config_to_netlink_map = dict(
+ (
+ (Link.IFLA_BRPORT_PRIORITY, int),
+ (Link.IFLA_BRPORT_COST, int),
+ (Link.IFLA_BRPORT_MULTICAST_ROUTER, lambda x: bridge._ifla_brport_multicast_router_dict_to_int.get(x, 0)),
+ (Link.IFLA_BRPORT_FAST_LEAVE, utils.get_boolean_from_string),
+ (Link.IFLA_BRPORT_LEARNING, utils.get_boolean_from_string),
+ (Link.IFLA_BRPORT_UNICAST_FLOOD, utils.get_boolean_from_string),
+ (Link.IFLA_BRPORT_MCAST_FLOOD, utils.get_boolean_from_string),
+ (Link.IFLA_BRPORT_GROUP_FWD_MASK, lambda x: x),
+ (Link.IFLA_BRPORT_ARP_SUPPRESS, utils.get_boolean_from_string)
+ )
+ )