summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2024-05-10 15:17:22 +0200
committerChristian Breunig <christian@breunig.cc>2024-05-10 15:18:08 +0200
commit314901e7b45782fb6266b35b0e788ab7ea1404b8 (patch)
tree3fc2edd5532beaf1f01cd932c0c2d6829ceadb66
parentd8ddd7191d3004e886fa45a2cf9bd8dd5e7f5e14 (diff)
downloadvyos-1x-314901e7b45782fb6266b35b0e788ab7ea1404b8.tar.gz
vyos-1x-314901e7b45782fb6266b35b0e788ab7ea1404b8.zip
bond: T6303: must reset system-mac to 00:00:00:00:00:00 on deletion
-rw-r--r--python/vyos/ifconfig/bond.py19
-rwxr-xr-xsmoketest/scripts/cli/test_interfaces_bonding.py16
2 files changed, 25 insertions, 10 deletions
diff --git a/python/vyos/ifconfig/bond.py b/python/vyos/ifconfig/bond.py
index f26426915..b8ea90049 100644
--- a/python/vyos/ifconfig/bond.py
+++ b/python/vyos/ifconfig/bond.py
@@ -449,18 +449,13 @@ class BondIf(Interface):
Interface(interface).set_admin_state('up')
# Bonding policy/mode - default value, always present
- mode = config.get('mode')
- self.set_mode(mode)
+ self.set_mode(config['mode'])
# LACPDU transmission rate - default value
- if mode == '802.3ad':
+ if config['mode'] == '802.3ad':
self.set_lacp_rate(config.get('lacp_rate'))
- # Add system mac address for 802.3ad
- if mode == '802.3ad' and 'system_mac' in config:
- self.set_system_mac(config.get('system_mac'))
-
- if mode not in ['802.3ad', 'balance-tlb', 'balance-alb']:
+ if config['mode'] not in ['802.3ad', 'balance-tlb', 'balance-alb']:
tmp = dict_search('arp_monitor.interval', config)
value = tmp if (tmp != None) else '0'
self.set_arp_interval(value)
@@ -495,6 +490,14 @@ class BondIf(Interface):
Interface(interface).flush_addrs()
self.add_port(interface)
+ # Add system mac address for 802.3ad - default address is all zero
+ # mode is always present (defaultValue)
+ if config['mode'] == '802.3ad':
+ mac = '00:00:00:00:00:00'
+ if 'system_mac' in config:
+ mac = config['system_mac']
+ self.set_system_mac(mac)
+
# Primary device interface - must be set after 'mode'
value = config.get('primary')
if value: self.set_primary(value)
diff --git a/smoketest/scripts/cli/test_interfaces_bonding.py b/smoketest/scripts/cli/test_interfaces_bonding.py
index 091a7a3c5..f436424b8 100755
--- a/smoketest/scripts/cli/test_interfaces_bonding.py
+++ b/smoketest/scripts/cli/test_interfaces_bonding.py
@@ -243,7 +243,9 @@ class BondingInterfaceTest(BasicInterfaceTest.TestCase):
def test_bonding_system_mac(self):
# configure member interfaces and system-mac
+ default_system_mac = '00:00:00:00:00:00' # default MAC is all zeroes
system_mac = '00:50:ab:cd:ef:11'
+
for interface in self._interfaces:
for option in self._options.get(interface, []):
self.cli_set(self._base_path + [interface] + option.split())
@@ -254,8 +256,18 @@ class BondingInterfaceTest(BasicInterfaceTest.TestCase):
# verify config
for interface in self._interfaces:
- defined_mac = read_file(f'/sys/class/net/{interface}/bonding/ad_actor_system')
- self.assertIn(defined_mac, system_mac)
+ tmp = read_file(f'/sys/class/net/{interface}/bonding/ad_actor_system')
+ self.assertIn(tmp, system_mac)
+
+ for interface in self._interfaces:
+ self.cli_delete(self._base_path + [interface, 'system-mac'])
+
+ self.cli_commit()
+
+ # verify default value
+ for interface in self._interfaces:
+ tmp = read_file(f'/sys/class/net/{interface}/bonding/ad_actor_system')
+ self.assertIn(tmp, default_system_mac)
def test_bonding_evpn_multihoming(self):
id = '5'