summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorNataliia Solomko <natalirs1985@gmail.com>2026-07-13 16:19:16 +0300
committerViacheslav Hletenko <v.gletenko@vyos.io>2026-08-20 13:31:53 +0000
commit271751b0a20eccce818b034ab196351279074210 (patch)
tree1af6eaedf793a33bcd19b130a59eab596dbcd993 /python
parent79e70fbfe0c4b5b33c5c707f0b0fee904fedd79f (diff)
downloadvyos-1x-271751b0a20eccce818b034ab196351279074210.tar.gz
vyos-1x-271751b0a20eccce818b034ab196351279074210.zip
vpp: T9057: Fix promiscuous mode not disabled on bond member detach
detach_member() never disabled promiscuous mode when a member left a VPP bond or the bond was deleted, unlike add_member() which always enabled it. Disable it on detach, except for members that still have their own vif/vif-s sub-interfaces configured, since VPP requires promiscuous mode to pass their VLAN-tagged traffic.
Diffstat (limited to 'python')
-rw-r--r--python/vyos/ifconfig/vpp/bond.py23
1 files changed, 14 insertions, 9 deletions
diff --git a/python/vyos/ifconfig/vpp/bond.py b/python/vyos/ifconfig/vpp/bond.py
index cece5560d..240657383 100644
--- a/python/vyos/ifconfig/vpp/bond.py
+++ b/python/vyos/ifconfig/vpp/bond.py
@@ -35,6 +35,7 @@ class VPPBondInterface(Interface, VPPInterface):
self.mode = config.get('mode')
self.load_balance = config.get('hash_policy')
self.mac = config.get('mac')
+ self.vlan_members = config.get('vlan_members')
def _create(self):
pass
@@ -76,26 +77,30 @@ class VPPBondInterface(Interface, VPPInterface):
"""Add member to Bond interface
Example:
from vyos.ifconfig.vpp import VPPBondInterface
- a = VPPBondInterface(ifname='vppbond0', config)
+ a = VPPBondInterface('vppbond0', config)
a.add_member(interface='eth0')
"""
- member_if_index = self.vpp.get_sw_if_index(interface)
self.vpp.api.bond_add_member(
- bond_sw_if_index=self.index, sw_if_index=member_if_index
- )
- self.vpp.api.sw_interface_set_promisc(
- sw_if_index=member_if_index, promisc_on=True
+ bond_sw_if_index=self.index,
+ sw_if_index=self.vpp.get_sw_if_index(interface),
)
+ self.vpp.set_promisc(interface, enable=True)
def detach_member(self, interface):
"""Detach member from Bond interface
Example:
from vyos.ifconfig.vpp import VPPBondInterface
- a = VPPBondInterface(ifname='vppbond0')
+ config = {'vlan_members': []}
+ a = VPPBondInterface('vppbond0', config)
a.detach_member(interface='eth0')
"""
- member_if_index = self.vpp.get_sw_if_index(interface)
- self.vpp.api.bond_detach_member(sw_if_index=member_if_index)
+ self.vpp.api.bond_detach_member(
+ sw_if_index=self.vpp.get_sw_if_index(interface),
+ )
+ # Keep promiscuous mode if the interface still requires it for its
+ # own VLAN (vif/vif-s) sub-interfaces
+ if interface not in self.vlan_members:
+ self.vpp.set_promisc(interface, enable=False)
def get_members(self):
members = []