summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorfett0 <fernando.gmaidana@gmail.com>2024-05-04 17:07:26 +0000
committerMergify <37929162+mergify[bot]@users.noreply.github.com>2024-05-10 13:21:59 +0000
commit05099eab245c265474f10ffb206ab23c494c8b88 (patch)
treedace6d233fd4a9defc2fe39586f037b10074e74c /python
parent4960a67e12c1d10a59812f0167f017131a9617b5 (diff)
downloadvyos-1x-05099eab245c265474f10ffb206ab23c494c8b88.tar.gz
vyos-1x-05099eab245c265474f10ffb206ab23c494c8b88.zip
bond: T6303: add system mac address on bond
(cherry picked from commit 234f35d8bae71b5d33ad97cdabc236ec6b13c3a2)
Diffstat (limited to 'python')
-rw-r--r--python/vyos/ifconfig/bond.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/python/vyos/ifconfig/bond.py b/python/vyos/ifconfig/bond.py
index c6d0f1cff..b381ba0e1 100644
--- a/python/vyos/ifconfig/bond.py
+++ b/python/vyos/ifconfig/bond.py
@@ -18,6 +18,7 @@ import os
from vyos.ifconfig.interface import Interface
from vyos.utils.dict import dict_search
from vyos.utils.assertion import assert_list
+from vyos.utils.assertion import assert_mac
from vyos.utils.assertion import assert_positive
@Interface.register
@@ -54,6 +55,10 @@ class BondIf(Interface):
'validate': lambda v: assert_list(v, ['slow', 'fast']),
'location': '/sys/class/net/{ifname}/bonding/lacp_rate',
},
+ 'bond_system_mac': {
+ 'validate': assert_mac,
+ 'location': '/sys/class/net/{ifname}/bonding/ad_actor_system',
+ },
'bond_miimon': {
'validate': assert_positive,
'location': '/sys/class/net/{ifname}/bonding/miimon'
@@ -385,6 +390,24 @@ class BondIf(Interface):
"""
return self.set_interface('bond_mode', mode)
+ def set_system_mac(self, mac):
+ """
+ In an AD system, this specifies the mac-address for the actor in
+ protocol packet exchanges (LACPDUs). The value cannot be NULL or
+ multicast. It is preferred to have the local-admin bit set for this
+ mac but driver does not enforce it. If the value is not given then
+ system defaults to using the masters' mac address as actors' system
+ address.
+
+ This parameter has effect only in 802.3ad mode and is available through
+ SysFs interface.
+
+ Example:
+ >>> from vyos.ifconfig import BondIf
+ >>> BondIf('bond0').set_system_mac('00:50:ab:cd:ef:01')
+ """
+ return self.set_interface('bond_system_mac', mac)
+
def update(self, config):
""" General helper function which works on a dictionary retrived by
get_config_dict(). It's main intention is to consolidate the scattered
@@ -433,6 +456,10 @@ class BondIf(Interface):
if 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']:
tmp = dict_search('arp_monitor.interval', config)
value = tmp if (tmp != None) else '0'