summaryrefslogtreecommitdiff
path: root/src/migration-scripts
diff options
context:
space:
mode:
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)