]> git.proxmox.com Git - mirror_ifupdown2.git/blobdiff - ifupdown2/addons/address.py
addons: address: clear stale svi fdb entries when svi mac is changed
[mirror_ifupdown2.git] / ifupdown2 / addons / address.py
index 6fb8bd48ea81833b8c11b7fd7df7491890c1f5de..d4766b2ed7dfafc32de6ab76307a037bb87f795c 100644 (file)
@@ -424,8 +424,7 @@ class address(AddonWithIpBlackList, moduleBase):
     def _get_hwaddress(self, ifaceobj):
         return utils.strip_hwaddress(ifaceobj.get_attr_value_first('hwaddress'))
 
-    def _process_bridge(self, ifaceobj, up, old_mac_addr=None):
-        hwaddress = self._get_hwaddress(ifaceobj)
+    def _process_bridge(self, ifaceobj, up, hwaddress, old_mac_addr=None):
         addrs = ifaceobj.get_attr_value_first('address')
         arp_accept = ifaceobj.get_attr_value_first('arp-accept')
         arp_accept = utils.boolean_support_binary(arp_accept)
@@ -454,7 +453,8 @@ class address(AddonWithIpBlackList, moduleBase):
                 # mac address. The current code only checks for the statemanager for old 'hwaddress' attribute but
                 # couldn't find any. Now we save the mac addr before updating it, so we can later clear it from the fdb.
                 try:
-                    self.iproute2.bridge_fdb_del(bridgename, old_mac_addr, vlan)
+                    if utils.mac_str_to_int(old_mac_addr) != utils.mac_str_to_int(hwaddress):
+                        self.iproute2.bridge_fdb_del(bridgename, old_mac_addr, vlan)
                 except:
                     pass
             if up:
@@ -1072,7 +1072,7 @@ class address(AddonWithIpBlackList, moduleBase):
 
         try:
             # Handle special things on a bridge
-            self._process_bridge(ifaceobj, True, self.process_hwaddress(ifaceobj))
+            self._process_bridge(ifaceobj, True, *self.process_hwaddress(ifaceobj))
         except Exception as e:
             self.log_error('%s: %s' % (ifaceobj.name, str(e)), ifaceobj)
 
@@ -1154,9 +1154,9 @@ class address(AddonWithIpBlackList, moduleBase):
                         hwaddress = self.cache.get_link_address(lower)
                         break
                 if not hwaddress:
-                    return
+                    return None, None
             else:
-                return
+                return None, None
 
         if not ifupdownflags.flags.PERFMODE:  # system is clean
             running_hwaddress = self.cache.get_link_address(ifaceobj.name)
@@ -1183,7 +1183,7 @@ class address(AddonWithIpBlackList, moduleBase):
                     for l in ifaceobj.lowerifaces:
                         self.netlink.link_up(l)
 
-        return old_mac_addr
+        return hwaddress, old_mac_addr
 
     def _down(self, ifaceobj, ifaceobj_getfunc=None):
         try:
@@ -1232,7 +1232,10 @@ class address(AddonWithIpBlackList, moduleBase):
             # address.
 
             # Handle special things on a bridge
-            self._process_bridge(ifaceobj, False)
+            hwaddress = self._get_hwaddress(ifaceobj)
+            if not hwaddress:
+                hwaddress = self.cache.get_link_address(ifaceobj.name)
+            self._process_bridge(ifaceobj, False, hwaddress, None)
         except Exception as e:
             self.logger.debug('%s : %s' %(ifaceobj.name, str(e)))
             pass