From 8e392a3dbc16f7b80a979f7b4e9c11408d700e6f Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Thu, 13 May 2021 10:49:39 +0200
Subject: bonding: T3543: add support to configure lact-rate (slow or fast)

Option specifying the rate in which we'll ask our link partner to transmit
LACPDU packets in 802.3ad mode.

  set interfaces bonding bond0 lacp-rate <slow|fast>

slow: Request partner to transmit LACPDUs every 30 seconds (default)
fast: Request partner to transmit LACPDUs every 1 second
---
 python/vyos/ifconfig/bond.py | 34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)

(limited to 'python')

diff --git a/python/vyos/ifconfig/bond.py b/python/vyos/ifconfig/bond.py
index bfa3b0025..233d53688 100644
--- a/python/vyos/ifconfig/bond.py
+++ b/python/vyos/ifconfig/bond.py
@@ -51,6 +51,10 @@ class BondIf(Interface):
             'validate': assert_positive,
             'location': '/sys/class/net/{ifname}/bonding/min_links',
         },
+        'bond_lacp_rate': {
+            'validate': lambda v: assert_list(v, ['slow', 'fast']),
+            'location': '/sys/class/net/{ifname}/bonding/lacp_rate',
+        },
         'bond_miimon': {
             'validate': assert_positive,
             'location': '/sys/class/net/{ifname}/bonding/miimon'
@@ -152,6 +156,26 @@ class BondIf(Interface):
         """
         self.set_interface('bond_min_links', number)
 
+    def set_lacp_rate(self, slow_fast):
+        """
+        Option specifying the rate in which we'll ask our link partner
+	    to transmit LACPDU packets in 802.3ad mode.  Possible values
+	    are:
+
+	    slow or 0
+		    Request partner to transmit LACPDUs every 30 seconds
+
+	    fast or 1
+		    Request partner to transmit LACPDUs every 1 second
+
+	    The default is slow.
+
+        Example:
+        >>> from vyos.ifconfig import BondIf
+        >>> BondIf('bond0').set_lacp_rate('slow')
+        """
+        self.set_interface('bond_lacp_rate', slow_fast)
+
     def set_arp_interval(self, interval):
         """
         Specifies the ARP link monitoring frequency in milliseconds.
@@ -382,9 +406,13 @@ class BondIf(Interface):
                 if not dict_search(f'member.interface_remove.{interface}.disable', config):
                     Interface(interface).set_admin_state('up')
 
-            # Bonding policy/mode
-            value = config.get('mode')
-            if value: self.set_mode(value)
+            # Bonding policy/mode - default value, always present
+            mode = config.get('mode')
+            self.set_mode(mode)
+
+            # LACPDU transmission rate - default value
+            if mode == '802.3ad':
+                self.set_lacp_rate(config.get('lacp_rate'))
 
             # Add (enslave) interfaces to bond
             value = dict_search('member.interface', config)
-- 
cgit v1.2.3