summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2026-08-20 10:03:25 -0500
committerGitHub <noreply@github.com>2026-08-20 10:03:25 -0500
commitac99e72affedc97c62d47d2391ade14fd6c2e884 (patch)
tree72fa8f8c6a17164a766514751e38f62e18692ef4 /src
parentb30ccbf4a5fdcc2240664d9b6d3814c90f7b1868 (diff)
parent271751b0a20eccce818b034ab196351279074210 (diff)
downloadvyos-1x-ac99e72affedc97c62d47d2391ade14fd6c2e884.tar.gz
vyos-1x-ac99e72affedc97c62d47d2391ade14fd6c2e884.zip
Merge pull request #5330 from natali-rs1985/T9057
vpp: T9057: Fix promiscuous mode not disabled on bond member detach
Diffstat (limited to 'src')
-rw-r--r--src/conf_mode/vpp_interfaces_bonding.py18
1 files changed, 18 insertions, 0 deletions
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']: