'dual connected VxLANs',
'validvals' : ['<ipv4>', ],
'example' : ['clagd-vxlan-anycast-ip 36.0.0.11']},
+ 'arp-accept' :
+ { 'help': 'Allow gratuitous arp to update arp table',
+ 'validvals': ['on', 'off', 'yes', 'no', '0', '1'],
+ 'default' : 'off',
+ 'example' : ['arp-accept on']},
'ip-forward' :
{ 'help': 'ip forwarding flag',
'validvals': ['on', 'off', 'yes', 'no', '0', '1'],
def _process_bridge(self, ifaceobj, up):
hwaddress = self._get_hwaddress(ifaceobj)
addrs = ifaceobj.get_attr_value_first('address')
+ arp_accept = ifaceobj.get_attr_value_first('arp-accept')
+ arp_accept = utils.boolean_support_binary(arp_accept)
is_vlan_dev_on_vlan_aware_bridge = False
is_bridge = self.ipcmd.is_bridge(ifaceobj.name)
if not is_bridge:
self.write_file('/proc/sys/net/ipv4/conf/%s' % ifaceobj.name +
'/arp_accept', '0')
else:
- self.write_file('/proc/sys/net/ipv4/conf/%s/arp_accept' % ifaceobj.name, '0')
+ self.write_file('/proc/sys/net/ipv4/conf/%s/arp_accept' % ifaceobj.name, arp_accept)
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:
if addr_method not in ["dhcp", "ppp"]:
self._inet_address_config(ifaceobj, ifaceobj_getfunc,
force_reapply)
+ else:
+ # remove old addresses added by ifupdown2
+ # (if intf was moved from static config to dhcp)
+ for old_ifaceobj in statemanager.statemanager_api.get_ifaceobjs(ifaceobj.name) or []:
+ for addr in old_ifaceobj.get_attr_value("address") or []:
+ self.ipcmd.addr_del(ifaceobj.name, addr)
self.process_mtu(ifaceobj, ifaceobj_getfunc)