]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: bridge: reset vlan_filtering when user moves from vlan aware to
authorRoopa Prabhu <roopa@cumulusnetworks.com>
Wed, 3 Aug 2016 19:22:14 +0000 (12:22 -0700)
committerRoopa Prabhu <roopa@cumulusnetworks.com>
Wed, 3 Aug 2016 19:22:14 +0000 (12:22 -0700)
unaware

Ticket: CM-12070
Reviewed By: julien, nikhil
Testing Done: Tested with config in the bug

The bug also talks about removing the vlans during this
transition. If the vlans are removed from the interfaces file,
ifupdown2 will delete them on an ifreload. In any case, once moved to
vlan unaware bridge settings, kernel and switchd
don't look at vlans any more.

Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
addons/bridge.py

index d07cd9fd10646ece78494e1e401a0c5e1a233382..44df78bfade363efd57cbaff58e88df86acd2e19 100644 (file)
@@ -977,9 +977,9 @@ class bridge(moduleBase):
             self.log_error(str(e), bportifaceobj)
 
     def _apply_bridge_port_settings_all(self, ifaceobj,
-                                        ifaceobj_getfunc=None):
+                                        ifaceobj_getfunc=None,
+                                        bridge_vlan_aware=False):
         err = False
-        bridge_vlan_aware = ifaceobj.get_attr_value_first('bridge-vlan-aware') == 'yes'
 
         if (ifaceobj.get_attr_value_first('bridge-port-vids') and
                 ifaceobj.get_attr_value_first('bridge-port-pvids')):
@@ -1105,14 +1105,21 @@ class bridge(moduleBase):
             raise Exception(str(e))
 
         try:
+            bridge_vlan_aware = False
             if ifaceobj.get_attr_value_first('bridge-vlan-aware') == 'yes':
+                bridge_vlan_aware = True
                 if (bridge_just_created or
                         not self.ipcmd.bridge_is_vlan_aware(ifaceobj.name)):
                     self.ipcmd.link_set(ifaceobj.name, 'vlan_filtering', '1',
                                         False, "bridge")
                     if not bridge_just_created:
                         ifaceobj.module_flags[self.name] = ifaceobj.module_flags.setdefault(self.name,0) | bridgeFlags.PORT_PROCESSED_OVERRIDE
-
+            elif (not bridge_just_created and
+                  ifaceobj.get_attr_value_first('bridge-vlan-aware') == 'no'
+                  and self.ipcmd.bridge_is_vlan_aware(ifaceobj.name)):
+                  self.ipcmd.link_set(ifaceobj.name, 'vlan_filtering', '0',
+                                      False, "bridge")
+                  bridge_vlan_aware = False
         except Exception, e:
             raise Exception(str(e))
 
@@ -1137,12 +1144,12 @@ class bridge(moduleBase):
             # disable ipv6 for ports that were added to bridge
             self.handle_ipv6(running_ports, '1', ifaceobj=ifaceobj)
             self._apply_bridge_port_settings_all(ifaceobj,
-                            ifaceobj_getfunc=ifaceobj_getfunc)
+                            ifaceobj_getfunc=ifaceobj_getfunc,
+                            bridge_vlan_aware=bridge_vlan_aware)
         except Exception, e:
             err = True
             errstr = str(e)
             pass
-            #self._flush_running_vidinfo()
         finally:
             if ifaceobj.link_type != ifaceLinkType.LINK_NA:
                 for p in running_ports: