summaryrefslogtreecommitdiff
path: root/src/migration-scripts
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2026-02-28 19:48:51 +0100
committerGitHub <noreply@github.com>2026-02-28 19:48:51 +0100
commit3e448bd51685688bdae6ec698a3923cfdeb83689 (patch)
treefe2d66479b80af79153154c8890065fa37aa974f /src/migration-scripts
parent440e116cebac31cb51507b23add9d5c5cb414513 (diff)
parent3755dfa7612ffa7edc94537220340a00c9db13ad (diff)
downloadvyos-1x-3e448bd51685688bdae6ec698a3923cfdeb83689.tar.gz
vyos-1x-3e448bd51685688bdae6ec698a3923cfdeb83689.zip
Merge pull request #5014 from natali-rs1985/T8296
vpp: T8296: Move vxlan interface from vpp section to 'interfaces vpp vxlan'
Diffstat (limited to 'src/migration-scripts')
-rw-r--r--src/migration-scripts/vpp/5-to-6106
1 files changed, 79 insertions, 27 deletions
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)