Skip to content

Commit

Permalink
bond: T6303: must reset system-mac to 00:00:00:00:00:00 on deletion
Browse files Browse the repository at this point in the history
  • Loading branch information
c-po committed May 10, 2024
1 parent d8ddd71 commit 314901e
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 10 deletions.
19 changes: 11 additions & 8 deletions python/vyos/ifconfig/bond.py
Original file line number Diff line number Diff line change
Expand Up @@ -449,18 +449,13 @@ def update(self, config):
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)
Expand Down Expand Up @@ -495,6 +490,14 @@ def update(self, config):
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)
Expand Down
16 changes: 14 additions & 2 deletions smoketest/scripts/cli/test_interfaces_bonding.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,9 @@ def test_bonding_uniq_member_description(self):

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())
Expand All @@ -254,8 +256,18 @@ def test_bonding_system_mac(self):

# 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'
Expand Down

0 comments on commit 314901e

Please sign in to comment.