diff options
| author | Nataliia Solomko <natalirs1985@gmail.com> | 2026-02-20 12:42:35 +0200 |
|---|---|---|
| committer | Nataliia Solomko <natalirs1985@gmail.com> | 2026-02-25 19:25:31 +0200 |
| commit | dec957d8bf09f2a186bc12478eec275a88ef3896 (patch) | |
| tree | ec8449e209a87e52af224f28d8854bc9109b6f5a /src/conf_mode/vpp.py | |
| parent | 6fd7a87116ea91edbdbe86ed19c8274682d9ee8b (diff) | |
| download | vyos-1x-dec957d8bf09f2a186bc12478eec275a88ef3896.tar.gz vyos-1x-dec957d8bf09f2a186bc12478eec275a88ef3896.zip | |
vpp: T8283: Move bonding interface from vpp secction to 'interfaces vpp bonding'
Diffstat (limited to 'src/conf_mode/vpp.py')
| -rwxr-xr-x | src/conf_mode/vpp.py | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py index 90356e6f4..6d2e2866f 100755 --- a/src/conf_mode/vpp.py +++ b/src/conf_mode/vpp.py @@ -279,6 +279,15 @@ def get_config(config=None): iface for iface in pppoe_ifaces if iface.split('.')[0] in tmp ] + interfaces_config = conf.get_config_dict( + ['interfaces', 'vpp'], + key_mangling=('-', '_'), + get_first_key=True, + no_tag_node_value_mangle=True, + with_defaults=True, + with_recursive_defaults=True, + ) + if not conf.exists(base): if changed_pppoe_ifaces: set_dependents('pppoe_server', conf) @@ -286,6 +295,8 @@ def get_config(config=None): 'removed_ifaces': removed_ifaces, 'xconn_members': xconn_members, 'persist_config': eth_ifaces_persist, + 'interfaces_vpp': interfaces_config, + 'remove': {}, } config = conf.get_config_dict( @@ -423,6 +434,8 @@ def get_config(config=None): config['removed_ifaces'] = removed_ifaces config['xconn_members'] = xconn_members + config['interfaces_vpp'] = interfaces_config + # Dependencies for dependency, interface_type in dependency_interface_type_map.items(): # if conf.exists(base + ['interfaces', interface_type]): @@ -435,6 +448,13 @@ def get_config(config=None): iface_filter_eth(conf, iface) set_dependents(dependency, conf, iface) + for dependency, interface_type in dependency_interface_type_map.items(): + if conf.exists(['interfaces', 'vpp', interface_type]): + for iface, iface_config in interfaces_config.get( + interface_type, {} + ).items(): + set_dependents(dependency, conf, iface) + config['ipoe_conf'] = conf.get_config_dict( ['service', 'ipoe-server'], key_mangling=('-', '_'), @@ -484,8 +504,13 @@ def verify(config): config, 'IPFIX monitoring', config.get('ipfix', {}).get('interface', {}) ) + if config.get('interfaces_vpp') and 'remove' in config: + raise ConfigError( + 'VPP cannot be removed while VPP interfaces exist. Remove all "interfaces vpp" first!' + ) + # bail out early - looks like removal from running config - if not config or ('removed_ifaces' in config and 'settings' not in config): + if not config or 'remove' in config: return None if 'settings' not in config: @@ -640,7 +665,7 @@ def verify(config): def generate(config): - if not config or ('removed_ifaces' in config and 'settings' not in config): + if not config or 'remove' in config: # Remove old config and return service_conf.unlink(missing_ok=True) return None @@ -692,7 +717,7 @@ def apply(config): modules = ('vfio_iommu_type1', 'vfio_pci', 'vfio_pci_core', 'vfio') # Open persistent config # It is required for operations with interfaces - if not config or ('removed_ifaces' in config and 'settings' not in config): + if not config or 'remove' in config: # Cleanup persistent config with JSONStorage('vpp_conf') as persist_config: persist_config.delete() |
