From 3755dfa7612ffa7edc94537220340a00c9db13ad Mon Sep 17 00:00:00 2001 From: Nataliia Solomko Date: Thu, 26 Feb 2026 15:27:27 +0200 Subject: vpp: T8296: Move vxlan interface from vpp section to 'interfaces vpp vxlan' --- src/migration-scripts/vpp/5-to-6 | 106 +++++++++++++++++++++++++++++---------- 1 file changed, 79 insertions(+), 27 deletions(-) (limited to 'src/migration-scripts') diff --git a/src/migration-scripts/vpp/5-to-6 b/src/migration-scripts/vpp/5-to-6 index 84b91ce40..25529cf36 100644 --- a/src/migration-scripts/vpp/5-to-6 +++ b/src/migration-scripts/vpp/5-to-6 @@ -39,6 +39,8 @@ # # Move bonding interface from vpp section to 'interfaces vpp bonding' (T8283) # +# Move vxlan interface from vpp section to 'interfaces vpp vxlan' (T8296) +# from vyos.configtree import ConfigTree @@ -290,6 +292,55 @@ def _migrate_vpp_resources(config: ConfigTree) -> None: config.delete(new_base) +def _migrate_interface(config, type, ifname): + base = ['vpp', 'interfaces', type] + new_base = ['interfaces', 'vpp', type] + kernel_interface_base = ['vpp', 'kernel-interfaces'] + + kernel_interface_path = base + [ifname, 'kernel-interface'] + kernel_iface = None + if config.exists(kernel_interface_path): + kernel_iface = config.return_value(kernel_interface_path) + config.delete(kernel_interface_path) + new_ifname = f'vpp{ifname}' + iface_base = new_base + [new_ifname] + config.copy(base + [ifname], iface_base) + config.set_tag(new_base) + + if kernel_iface and config.exists(kernel_interface_base + [kernel_iface]): + if config.exists(kernel_interface_base + [kernel_iface, 'vif']): + config.copy(kernel_interface_base + [kernel_iface, 'vif'], iface_base + ['vif']) + if config.exists(kernel_interface_base + [kernel_iface, 'mtu']): + config.copy(kernel_interface_base + [kernel_iface, 'mtu'], iface_base + ['mtu']) + if config.exists(kernel_interface_base + [kernel_iface, 'address']): + config.copy(kernel_interface_base + [kernel_iface, 'address'], iface_base + ['address']) + config.delete(kernel_interface_base + [kernel_iface]) + + +def _migrate_members_bridge(config, ifname): + bridge_path = ['vpp', 'interfaces', 'bridge'] + if config.exists(bridge_path): + for iface in config.list_nodes(bridge_path): + tmp = bridge_path + [iface, 'member', 'interface'] + if config.exists(tmp): + for name in config.list_nodes(tmp): + if name == ifname: + new_name = f'vpp{name}' + config.rename(tmp + [name], new_name) + + +def _migrate_members_xconnect(config, ifname): + xconnect_path = ['vpp', 'interfaces', 'xconnect'] + if config.exists(xconnect_path): + for iface in config.list_nodes(xconnect_path): + tmp = xconnect_path + [iface, 'member', 'interface'] + if config.exists(tmp): + for name in config.return_values(tmp): + if name == ifname: + new_name = f'vpp{name}' + config.delete_value(tmp, name) + config.set(tmp, value=new_name, replace=False) + def _migrate_vpp_bonding_interface(config: ConfigTree) -> None: base = ['vpp', 'interfaces', 'bonding'] new_base = ['interfaces', 'vpp', 'bonding'] @@ -301,24 +352,7 @@ def _migrate_vpp_bonding_interface(config: ConfigTree) -> None: config.set(new_base) for ifname in config.list_nodes(base): - bond_kernel_interface_path = base + [ifname, 'kernel-interface'] - kernel_iface = None - if config.exists(bond_kernel_interface_path): - kernel_iface = config.return_value(bond_kernel_interface_path) - config.delete(bond_kernel_interface_path) - new_ifname = f'vpp{ifname}' - iface_base = new_base + [new_ifname] - config.copy(base + [ifname], iface_base) - config.set_tag(new_base) - - if kernel_iface and config.exists(kernel_interface_base + [kernel_iface]): - if config.exists(kernel_interface_base + [kernel_iface, 'vif']): - config.copy(kernel_interface_base + [kernel_iface, 'vif'], iface_base + ['vif']) - if config.exists(kernel_interface_base + [kernel_iface, 'mtu']): - config.copy(kernel_interface_base + [kernel_iface, 'mtu'], iface_base + ['mtu']) - if config.exists(kernel_interface_base + [kernel_iface, 'address']): - config.copy(kernel_interface_base + [kernel_iface, 'address'], iface_base + ['address']) - config.delete(kernel_interface_base + [kernel_iface]) + _migrate_interface(config, 'bonding', ifname) for feature in ['nat44', 'cgnat']: for direction in ['inside', 'outside']: @@ -341,15 +375,32 @@ def _migrate_vpp_bonding_interface(config: ConfigTree) -> None: new_name = f'vpp{name}' config.rename(ipfix_path + [name], new_name) - bridge_path = ['vpp', 'interfaces', 'bridge'] - if config.exists(bridge_path): - for iface in config.list_nodes(bridge_path): - tmp = bridge_path + [iface, 'member', 'interface'] - if config.exists(tmp): - for name in config.list_nodes(tmp): - if name == ifname: - new_name = f'vpp{name}' - config.rename(tmp + [name], new_name) + _migrate_members_bridge(config, ifname) + + config.delete(base) + + if config.exists(kernel_interface_base) and len(config.list_nodes(kernel_interface_base)) == 0: + config.delete(['vpp', 'kernel-interfaces']) + + if len(config.list_nodes(['vpp', 'interfaces'])) == 0: + config.delete(['vpp', 'interfaces']) + + +def _migrate_vpp_vxlan_interface(config: ConfigTree) -> None: + base = ['vpp', 'interfaces', 'vxlan'] + new_base = ['interfaces', 'vpp', 'vxlan'] + kernel_interface_base = ['vpp', 'kernel-interfaces'] + + if not config.exists(base): + return + + config.set(new_base) + + for ifname in config.list_nodes(base): + _migrate_interface(config, 'vxlan', ifname) + + _migrate_members_bridge(config, ifname) + _migrate_members_xconnect(config, ifname) config.delete(base) @@ -376,3 +427,4 @@ def migrate(config: ConfigTree) -> None: _migrate_vpp_dpdk_options(config) _migrate_vpp_resources(config) _migrate_vpp_bonding_interface(config) + _migrate_vpp_vxlan_interface(config) -- cgit v1.2.3