diff options
| author | Nataliia Solomko <natalirs1985@gmail.com> | 2026-07-13 16:19:16 +0300 |
|---|---|---|
| committer | Viacheslav Hletenko <v.gletenko@vyos.io> | 2026-08-20 13:31:53 +0000 |
| commit | 271751b0a20eccce818b034ab196351279074210 (patch) | |
| tree | 1af6eaedf793a33bcd19b130a59eab596dbcd993 /python | |
| parent | 79e70fbfe0c4b5b33c5c707f0b0fee904fedd79f (diff) | |
| download | vyos-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.py | 23 |
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 = [] |
