1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00

addons: bridge: detect and warn when arp suppression is enabled and there is no vlan configured

Signed-off-by: Julien Fortin <jfortin@nvidia.com>
This commit is contained in:
Julien Fortin
2021-03-02 17:25:01 +01:00
committed by Julien Fortin
parent 6a1110e3ed
commit a037ffc5f0

View File

@ -870,7 +870,37 @@ class bridge(Bridge, moduleBase):
c1 = self.syntax_check_vxlan_in_vlan_aware_br(ifaceobj, ifaceobj_getfunc)
c2 = self.syntax_check_bridge_allow_multiple_vlans(ifaceobj, ifaceobj_getfunc)
c3 = self.syntax_check_learning_l2_vni_evpn(ifaceobj)
return retval and c1 and c3 #and c2
c4 = self.syntax_check_bridge_arp_vni_vlan(ifaceobj, ifaceobj_getfunc)
return retval and c1 and c3 and c4 #and c2
def syntax_check_bridge_arp_vni_vlan(self, ifaceobj, ifaceobj_getfunc):
"""
Detect and warn when arp suppression is enabled and there is no vlan configured
:param ifaceobj:
:param ifaceobj_getfunc:
:return boolean:
"""
if ifaceobj.link_kind & ifaceLinkKind.VXLAN \
and ifaceobj.link_privflags & ifaceLinkPrivFlags.BRIDGE_PORT \
and utils.get_boolean_from_string(ifaceobj.get_attr_value_first("bridge-arp-nd-suppress")):
bridge_access = ifaceobj.get_attr_value_first("bridge-access")
for obj in ifaceobj_getfunc(ifaceobj.upperifaces[0]) or []:
for upper_ifname in obj.upperifaces or []:
for upper_obj in ifaceobj_getfunc(upper_ifname) or []:
if upper_obj.link_kind & ifaceLinkKind.VLAN and upper_obj.get_attr_value_first("vlan-id") == bridge_access:
return True
self.logger.warning(
"ARP suppression configured on %s and associated %s not configured. "
"This may result in unexpected behavior"
% (ifaceobj.name, bridge_access)
)
return False
return True
def syntax_check_learning_l2_vni_evpn(self, ifaceobj):
result = True
@ -1927,6 +1957,9 @@ class bridge(Bridge, moduleBase):
# check for bridge-learning on l2 vni in evpn setup
self.syntax_check_learning_l2_vni_evpn(ifaceobj)
# detect and warn when arp suppression is enabled and there is no vlan configured
self.syntax_check_bridge_arp_vni_vlan(ifaceobj, ifaceobj_getfunc)
vlan_aware_bridge = self.cache.bridge_is_vlan_aware(bridge_name)
if vlan_aware_bridge:
self.up_bridge_port_vlan_aware_bridge(ifaceobj,