summaryrefslogtreecommitdiff
path: root/src/migration-scripts/vpp
diff options
context:
space:
mode:
authorOleksandr Kuchmystyi <o.kuchmystyi@vyos.io>2026-02-16 17:41:38 +0300
committerOleksandr Kuchmystyi <o.kuchmystyi@vyos.io>2026-02-18 13:30:02 +0300
commited20c353e8e1a7fd9d47bb6020f40815285ef2f9 (patch)
tree682994117719758c842b6b265cc4b054e5ad5797 /src/migration-scripts/vpp
parent0f4b6c0d892ea35c947643ab8d6e0f84e51c6191 (diff)
downloadvyos-1x-ed20c353e8e1a7fd9d47bb6020f40815285ef2f9.tar.gz
vyos-1x-ed20c353e8e1a7fd9d47bb6020f40815285ef2f9.zip
vpp: T8266: Add global `interfaces-rx-mode` setting and remove per-interface commands
Add `set vpp settings interfaces-rx-mode <polling|interrupt|adaptive>` to configure RX mode for all interfaces. Raise error if any interface does not support the selected mode. Also remove per-interface rx-mode commands: - `set vpp settings interface <name> rx-mode` - `set vpp kernel-interfaces <name> rx-mode`
Diffstat (limited to 'src/migration-scripts/vpp')
-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)