]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: address: if hwaddress changed delete old fdb entry
authorJulien Fortin <julien@cumulusnetworks.com>
Tue, 2 Apr 2019 18:11:29 +0000 (02:11 +0800)
committerJulien Fortin <julien@cumulusnetworks.com>
Wed, 18 Sep 2019 10:51:45 +0000 (12:51 +0200)
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
ifupdown2/addons/address.py

index 4746e75049a661879cdca92be9d0c00e2f44a3ca..b883fbae93f63e6b56814e8ae8dea7fb339f217b 100644 (file)
@@ -292,10 +292,19 @@ class address(moduleBase):
                 else:
                     self.write_file('/proc/sys/net/ipv4/conf/%s/arp_accept' % ifaceobj.name, '0')
         if hwaddress and is_vlan_dev_on_vlan_aware_bridge:
-           if up:
-              self.ipcmd.bridge_fdb_add(bridgename, hwaddress, vlan)
-           else:
-              self.ipcmd.bridge_fdb_del(bridgename, hwaddress, vlan)
+            if up:
+                # check statemanager to delete the old entry if necessary
+                try:
+                    for old_obj in statemanager.statemanager_api.get_ifaceobjs(ifaceobj.name) or []:
+                        old_hwaddress = old_obj.get_attr_value_first("hwaddress")
+                        if old_hwaddress and self.ipcmd.mac_str_to_int(old_hwaddress) != self.ipcmd.mac_str_to_int(hwaddress):
+                            self.ipcmd.bridge_fdb_del(bridgename, old_hwaddress, vlan)
+                            break
+                except:
+                    pass
+                self.ipcmd.bridge_fdb_add(bridgename, hwaddress, vlan)
+            else:
+                self.ipcmd.bridge_fdb_del(bridgename, hwaddress, vlan)
 
     def _get_anycast_addr(self, ifaceobjlist):
         for ifaceobj in ifaceobjlist: