diff options
| author | John Estabrook <jestabro@vyos.io> | 2026-08-20 10:03:25 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-20 10:03:25 -0500 |
| commit | ac99e72affedc97c62d47d2391ade14fd6c2e884 (patch) | |
| tree | 72fa8f8c6a17164a766514751e38f62e18692ef4 /src | |
| parent | b30ccbf4a5fdcc2240664d9b6d3814c90f7b1868 (diff) | |
| parent | 271751b0a20eccce818b034ab196351279074210 (diff) | |
| download | vyos-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.py | 18 |
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']: |
