From 271751b0a20eccce818b034ab196351279074210 Mon Sep 17 00:00:00 2001 From: Nataliia Solomko Date: Mon, 13 Jul 2026 16:19:16 +0300 Subject: 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. --- src/conf_mode/vpp_interfaces_bonding.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/conf_mode/vpp_interfaces_bonding.py b/src/conf_mode/vpp_interfaces_bonding.py index 932287a03..b703f8ab7 100644 --- a/src/conf_mode/vpp_interfaces_bonding.py +++ b/src/conf_mode/vpp_interfaces_bonding.py @@ -18,11 +18,14 @@ from vyos.config import Config from vyos.configdict import get_interface_dict +from vyos.configdict import has_vlan_subinterface_configured from vyos.configdict import is_node_changed +from vyos.configdict import leaf_node_changed from vyos.configdep import set_dependents, call_dependents from vyos.configverify import verify_mtu_ipv6 from vyos import ConfigError from vyos.utils.assertion import assert_mac +from vyos.utils.dict import dict_search from vyos.utils.process import is_systemd_service_active from vyos.ifconfig import Interface @@ -117,6 +120,21 @@ def get_config(config=None) -> dict: config['bond_members'] = deps_bond_dict(conf) + # Members that get detached (removed from the bond, or temporarily + # detached and re-attached during a rebuild) keep promiscuous mode + # enabled if they have their own VLAN (vif/vif-s) sub-interfaces + # configured + removed_members = ( + leaf_node_changed(conf, iface_path + ['member', 'interface']) or [] + ) + current_members = dict_search('member.interface', config, default=[]) + vlan_candidates = set(removed_members + current_members) + config['vlan_members'] = [ + member + for member in vlan_candidates + if has_vlan_subinterface_configured(conf, member) + ] + # Dependency config['xconn_members'] = deps_xconnect_dict(conf) if ifname in config['xconn_members']: -- cgit v1.2.3