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)
# 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:
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)
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)
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:
# 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