summaryrefslogtreecommitdiff
path: root/src/migration-scripts
diff options
context:
space:
mode:
authorNataliia S. <81954790+natali-rs1985@users.noreply.github.com>2026-02-18 14:28:51 +0200
committerGitHub <noreply@github.com>2026-02-18 14:28:51 +0200
commitfc94e37b6f3f2bffcea24d11c926f4536b449c16 (patch)
tree682994117719758c842b6b265cc4b054e5ad5797 /src/migration-scripts
parent0f4b6c0d892ea35c947643ab8d6e0f84e51c6191 (diff)
parented20c353e8e1a7fd9d47bb6020f40815285ef2f9 (diff)
downloadvyos-1x-fc94e37b6f3f2bffcea24d11c926f4536b449c16.tar.gz
vyos-1x-fc94e37b6f3f2bffcea24d11c926f4536b449c16.zip
Merge pull request #4995 from alexandr-san4ez/T8266-current
vpp: T8266: Add global `interface-rx-mode` setting and remove per-interface commands
Diffstat (limited to 'src/migration-scripts')
-rw-r--r--src/migration-scripts/vpp/7-to-850
1 files changed, 50 insertions, 0 deletions
diff --git a/src/migration-scripts/vpp/7-to-8 b/src/migration-scripts/vpp/7-to-8
index 0b2f81b4c..122456e1f 100644
--- a/src/migration-scripts/vpp/7-to-8
+++ b/src/migration-scripts/vpp/7-to-8
@@ -22,6 +22,10 @@
# Delete 'ipsec' node and all settings and replace it with single 'ipsec-acceleration' flag (T8262)
#
# Unify CPU settings into a single 'cpu-cores' node under 'resource-allocation' (T8268)
+#
+# Convert `vpp settings interface <name> rx-mode` and `vpp kernel-interfaces <name> rx-mode`
+# to `vpp settings interfaces-rx-mode` by choose the worst value from all nodes (T8266)
+#
from vyos.configtree import ConfigTree
@@ -106,6 +110,51 @@ def _migrate_vpp_cpu(config: ConfigTree) -> None:
config.delete(cpu_path)
+def _migrate_vpp_interface_rx_mode(config: ConfigTree) -> None:
+ # Per-interface rx-mode commands
+ external_interface_path = ['vpp', 'settings', 'interface']
+ kernel_interface_path = ['vpp', 'kernel-interfaces']
+
+ # New global interface rx-mode command
+ new_rx_mode_path = ['vpp', 'settings', 'interface-rx-mode']
+
+ def _iter_by_rx_modes(base_path: list):
+ if config.exists(base_path):
+ for iface_name in config.list_nodes(base_path):
+ rx_mode_path = base_path + [iface_name, 'rx-mode']
+ if config.exists(rx_mode_path):
+ rx_mode = config.return_value(rx_mode_path)
+ yield rx_mode, rx_mode_path
+
+ rx_modes = set()
+
+ def _collect_rx_modes(base_path: list):
+ for rx_mode, _ in _iter_by_rx_modes(base_path):
+ rx_modes.add(rx_mode)
+
+ _collect_rx_modes(external_interface_path)
+ _collect_rx_modes(kernel_interface_path)
+
+ if not rx_modes:
+ return
+
+ if 'interrupt' in rx_modes:
+ rx_mode = 'interrupt'
+ elif 'adaptive' in rx_modes:
+ rx_mode = 'adaptive'
+ else:
+ rx_mode = 'polling'
+
+ config.set(new_rx_mode_path, value=rx_mode)
+
+ def _delete_rx_modes(base_path: list):
+ for _, rx_mode_path in _iter_by_rx_modes(base_path):
+ config.delete(rx_mode_path)
+
+ _delete_rx_modes(external_interface_path)
+ _delete_rx_modes(kernel_interface_path)
+
+
def migrate(config: ConfigTree) -> None:
if not config.exists(['vpp']):
# Nothing to do
@@ -116,3 +165,4 @@ def migrate(config: ConfigTree) -> None:
_migrate_vpp_nat44(config)
_migrate_vpp_ipsec(config)
_migrate_vpp_cpu(config)
+ _migrate_vpp_interface_rx_mode(config)