summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNataliia Solomko <natalirs1985@gmail.com>2026-02-13 12:29:00 +0200
committerNataliia Solomko <natalirs1985@gmail.com>2026-02-13 20:20:31 +0200
commit9bfe2749a1fa41a4c77a3364851ac1fbefbf3ef3 (patch)
tree3fc0335466fb72306ce7304502c3a9bcc27e378d /src
parent4d1b3346c60f77cced2acf87098ed959fbe5a500 (diff)
downloadvyos-1x-9bfe2749a1fa41a4c77a3364851ac1fbefbf3ef3.tar.gz
vyos-1x-9bfe2749a1fa41a4c77a3364851ac1fbefbf3ef3.zip
vpp: T8254: Move 'nat44' and 'settings nat44' sections to 'nat nat44'
Diffstat (limited to 'src')
-rwxr-xr-xsrc/conf_mode/interfaces_ethernet.py10
-rwxr-xr-xsrc/conf_mode/vpp.py27
-rw-r--r--src/conf_mode/vpp_interfaces_bonding.py4
-rw-r--r--src/conf_mode/vpp_interfaces_gre.py4
-rw-r--r--src/conf_mode/vpp_interfaces_ipip.py4
-rw-r--r--src/conf_mode/vpp_interfaces_loopback.py4
-rw-r--r--src/conf_mode/vpp_interfaces_vxlan.py4
-rw-r--r--src/conf_mode/vpp_kernel-interfaces.py4
-rw-r--r--src/conf_mode/vpp_nat_nat44.py (renamed from src/conf_mode/vpp_nat.py)22
-rw-r--r--src/migration-scripts/vpp/7-to-834
-rw-r--r--src/op_mode/vpp_nat_nat44.py (renamed from src/op_mode/show_vpp_nat44.py)2
11 files changed, 64 insertions, 55 deletions
diff --git a/src/conf_mode/interfaces_ethernet.py b/src/conf_mode/interfaces_ethernet.py
index 97902c6e4..774a042fe 100755
--- a/src/conf_mode/interfaces_ethernet.py
+++ b/src/conf_mode/interfaces_ethernet.py
@@ -357,12 +357,12 @@ def verify_vpp_remove_vif(ethernet: dict):
# Known paths that already use VLAN interfaces
r'(nat\.cgnat\.interface\.inside)|'
r'(nat\.cgnat\.interface\.outside)|'
- r'(nat44\.interface\.inside)|'
- r'(nat44\.interface\.outside)|'
+ r'(nat\.nat44\.interface\.inside)|'
+ r'(nat\.nat44\.interface\.outside)|'
# Potential paths for VLAN interfaces
- r'(nat44\.address_pool\.translation\.interface)|'
- r'(nat44\.address_pool\.twice_nat\.interface)|'
- r'(nat44\.exclude\.rule\.(\d)+\.external_interface)|'
+ r'(nat\.nat44\.address_pool\.translation\.interface)|'
+ r'(nat\.nat44\.address_pool\.twice_nat\.interface)|'
+ r'(nat\.nat44\.exclude\.rule\.(\d)+\.external_interface)|'
r'(interfaces\.bonding\.bond(\d)+\.member\.interface)|'
r'(interfaces\.bridge\.br(\d)+\.member\.interface)|'
r'(interfaces\.xconnect\.xcon(\d)+\.member\.interface)|'
diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py
index ae75594d6..b26388cdc 100755
--- a/src/conf_mode/vpp.py
+++ b/src/conf_mode/vpp.py
@@ -54,7 +54,6 @@ from vyos.vpp.config_verify import (
verify_vpp_cpu_main_core,
verify_vpp_settings_cpu_skip_cores,
verify_vpp_settings_cpu_workers,
- verify_vpp_nat44_workers,
verify_vpp_memory,
verify_vpp_statseg_size,
verify_vpp_interfaces_dpdk_num_queues,
@@ -442,8 +441,8 @@ def get_config(config=None):
set_dependents('vpp_kernel_interface', conf, iface)
# NAT dependency
- if conf.exists(['vpp', 'nat44']):
- set_dependents('vpp_nat', conf)
+ if conf.exists(['vpp', 'nat', 'nat44']):
+ set_dependents('vpp_nat_nat44', conf)
if conf.exists(['vpp', 'nat', 'cgnat']):
set_dependents('vpp_nat_cgnat', conf)
@@ -539,11 +538,6 @@ def verify(config):
workers = _get_workers_count(config['settings'].get('cpu', {}))
- if 'workers' in config['settings']['nat44']:
- verify_vpp_nat44_workers(
- workers=workers, nat44_workers=config['settings']['nat44']['workers']
- )
-
verify_vpp_main_heap_size(config['settings'])
verify_vpp_statseg_size(config['settings'])
@@ -882,23 +876,6 @@ def apply(config):
# Syncronize routes via LCP
vpp_control.lcp_resync()
- # NAT44 settings
- nat44_settings = config['settings'].get('nat44', {})
-
- vpp_control.set_nat44_session_limit(
- int(nat44_settings.get('session_limit'))
- )
-
- if nat44_settings.get('workers'):
- bitmask = 0
- for worker_range in nat44_settings['workers']:
- worker_numbers = worker_range.split('-')
- for wid in range(
- int(worker_numbers[0]), int(worker_numbers[-1]) + 1
- ):
- bitmask |= 1 << wid
- vpp_control.set_nat_workers(bitmask)
-
except (VPPIOError, VPPValueError, VppNotRunningError) as e:
# if cannot connect to VPP or an error occurred then
# we need to stop vpp service and initialize interfaces
diff --git a/src/conf_mode/vpp_interfaces_bonding.py b/src/conf_mode/vpp_interfaces_bonding.py
index d25d64eb0..23d0720bf 100644
--- a/src/conf_mode/vpp_interfaces_bonding.py
+++ b/src/conf_mode/vpp_interfaces_bonding.py
@@ -144,8 +144,8 @@ def get_config(config=None) -> dict:
set_dependents('vpp_kernel_interface', conf, iface)
# NAT dependency
- if conf.exists(['vpp', 'nat44']):
- set_dependents('vpp_nat', conf)
+ if conf.exists(['vpp', 'nat', 'nat44']):
+ set_dependents('vpp_nat_nat44', conf)
if conf.exists(['vpp', 'nat', 'cgnat']):
set_dependents('vpp_nat_cgnat', conf)
diff --git a/src/conf_mode/vpp_interfaces_gre.py b/src/conf_mode/vpp_interfaces_gre.py
index 0b60d06b5..53a423dd9 100644
--- a/src/conf_mode/vpp_interfaces_gre.py
+++ b/src/conf_mode/vpp_interfaces_gre.py
@@ -115,8 +115,8 @@ def get_config(config=None) -> dict:
set_dependents('vpp_kernel_interface', conf, iface)
# NAT dependency
- if conf.exists(['vpp', 'nat44']):
- set_dependents('vpp_nat', conf)
+ if conf.exists(['vpp', 'nat', 'nat44']):
+ set_dependents('vpp_nat_nat44', conf)
if conf.exists(['vpp', 'nat', 'cgnat']):
set_dependents('vpp_nat_cgnat', conf)
diff --git a/src/conf_mode/vpp_interfaces_ipip.py b/src/conf_mode/vpp_interfaces_ipip.py
index e4db1e93c..eae51f5a2 100644
--- a/src/conf_mode/vpp_interfaces_ipip.py
+++ b/src/conf_mode/vpp_interfaces_ipip.py
@@ -114,8 +114,8 @@ def get_config(config=None) -> dict:
set_dependents('vpp_kernel_interface', conf, iface)
# NAT dependency
- if conf.exists(['vpp', 'nat44']):
- set_dependents('vpp_nat', conf)
+ if conf.exists(['vpp', 'nat', 'nat44']):
+ set_dependents('vpp_nat_nat44', conf)
if conf.exists(['vpp', 'nat', 'cgnat']):
set_dependents('vpp_nat_cgnat', conf)
diff --git a/src/conf_mode/vpp_interfaces_loopback.py b/src/conf_mode/vpp_interfaces_loopback.py
index 8874ecf2d..d08557959 100644
--- a/src/conf_mode/vpp_interfaces_loopback.py
+++ b/src/conf_mode/vpp_interfaces_loopback.py
@@ -104,8 +104,8 @@ def get_config(config=None) -> dict:
set_dependents('vpp_kernel_interface', conf, iface)
# NAT dependency
- if conf.exists(['vpp', 'nat44']):
- set_dependents('vpp_nat', conf)
+ if conf.exists(['vpp', 'nat', 'nat44']):
+ set_dependents('vpp_nat_nat44', conf)
if conf.exists(['vpp', 'nat', 'cgnat']):
set_dependents('vpp_nat_cgnat', conf)
diff --git a/src/conf_mode/vpp_interfaces_vxlan.py b/src/conf_mode/vpp_interfaces_vxlan.py
index 355139ffa..4a0b157e5 100644
--- a/src/conf_mode/vpp_interfaces_vxlan.py
+++ b/src/conf_mode/vpp_interfaces_vxlan.py
@@ -121,8 +121,8 @@ def get_config(config=None) -> dict:
set_dependents('vpp_kernel_interface', conf, iface)
# NAT dependency
- if conf.exists(['vpp', 'nat44']):
- set_dependents('vpp_nat', conf)
+ if conf.exists(['vpp', 'nat', 'nat44']):
+ set_dependents('vpp_nat_nat44', conf)
if conf.exists(['vpp', 'nat', 'cgnat']):
set_dependents('vpp_nat_cgnat', conf)
diff --git a/src/conf_mode/vpp_kernel-interfaces.py b/src/conf_mode/vpp_kernel-interfaces.py
index fcbc8ecc0..2e0e630e5 100644
--- a/src/conf_mode/vpp_kernel-interfaces.py
+++ b/src/conf_mode/vpp_kernel-interfaces.py
@@ -82,8 +82,8 @@ def get_config(config=None) -> dict:
if conf.exists(['vpp', 'nat', 'cgnat']):
set_dependents('vpp_nat_cgnat', conf)
- if conf.exists(['vpp', 'nat44']):
- set_dependents('vpp_nat', conf)
+ if conf.exists(['vpp', 'nat', 'nat44']):
+ set_dependents('vpp_nat_nat44', conf)
config['ifname'] = ifname
diff --git a/src/conf_mode/vpp_nat.py b/src/conf_mode/vpp_nat_nat44.py
index cfe527ab8..30111bf40 100644
--- a/src/conf_mode/vpp_nat.py
+++ b/src/conf_mode/vpp_nat_nat44.py
@@ -22,7 +22,7 @@ from vyos import ConfigError
from vyos.configdiff import Diff
from vyos.configdict import node_changed
-from vyos.config import Config
+from vyos.config import Config, config_dict_merge
from vyos.utils.network import get_interface_address
from vyos.vpp.utils import cli_ifaces_list
@@ -45,16 +45,14 @@ def get_config(config=None) -> dict:
else:
conf = Config()
- base = ['vpp', 'nat44']
+ base = ['vpp', 'nat', 'nat44']
- # Get config_dict with default values
+ # Get config_dict
config = conf.get_config_dict(
base,
key_mangling=('-', '_'),
get_first_key=True,
no_tag_node_value_mangle=True,
- with_defaults=True,
- with_recursive_defaults=True,
)
if not conf.exists(['vpp']):
@@ -74,6 +72,11 @@ def get_config(config=None) -> dict:
config['remove'] = True
return config
+ # Get default values which we need to conditionally update into the
+ # dictionary retrieved.
+ default_values = conf.get_config_defaults(**config.kwargs, recursive=True)
+ config = config_dict_merge(default_values, config)
+
config_changed = node_changed(
conf,
base,
@@ -110,13 +113,6 @@ def get_config(config=None) -> dict:
}
)
- settings = conf.get_config_dict(
- ['vpp', 'settings', 'nat44'],
- key_mangling=('-', '_'),
- with_recursive_defaults=True,
- )
- config.update(settings.get('nat44'))
-
if effective_config:
config.update({'effective': effective_config})
@@ -502,6 +498,8 @@ def apply(config):
tcp_established=int(config.get('timeout').get('tcp_established')),
tcp_transitory=int(config.get('timeout').get('tcp_transitory')),
)
+ if 'session_limit' in config:
+ n.set_nat44_session_limit(int(config['session_limit']))
if __name__ == '__main__':
diff --git a/src/migration-scripts/vpp/7-to-8 b/src/migration-scripts/vpp/7-to-8
index dfe2f5013..e6cff9668 100644
--- a/src/migration-scripts/vpp/7-to-8
+++ b/src/migration-scripts/vpp/7-to-8
@@ -16,6 +16,9 @@
# Rename `vpp settings logging default-log-level` to
# `vpp settings logging default-level` (T8255)
#
+# Move 'vpp nat44' and 'vpp settings nat44' to 'vpp nat nat44'.
+# Drop settings for nat workers (T8254)
+
from vyos.configtree import ConfigTree
@@ -26,5 +29,36 @@ def _migrate_vpp_log(config: ConfigTree) -> None:
config.rename(base + ['default-log-level'], 'default-level')
+def _migrate_vpp_nat44(config: ConfigTree) -> None:
+ base_path = ['vpp', 'nat44']
+ new_base_path = ['vpp', 'nat', 'nat44']
+ settings_path = ['vpp', 'settings', 'nat44']
+
+ if not config.exists(base_path):
+ # Nothing to do
+ return
+
+ if not config.exists(['vpp', 'nat']):
+ config.set(['vpp', 'nat'])
+
+ # copy "vpp nat44" to "vpp nat nat44"
+ config.copy(base_path, new_base_path)
+ config.delete(base_path)
+
+ # move 'vpp settings nat44' to 'vpp nat nat44'
+ if config.exists(settings_path):
+ if config.exists(settings_path + ['session-limit']):
+ session_limit = config.return_value(settings_path + ['session-limit'])
+ config.set(new_base_path + ['session-limit'], value=session_limit)
+ if config.exists(settings_path + ['timeout']):
+ config.copy(settings_path + ['timeout'], new_base_path + ['timeout'])
+ config.delete(settings_path)
+
+
def migrate(config: ConfigTree) -> None:
+ if not config.exists(['vpp']):
+ # Nothing to do
+ return
+
_migrate_vpp_log(config)
+ _migrate_vpp_nat44(config)
diff --git a/src/op_mode/show_vpp_nat44.py b/src/op_mode/vpp_nat_nat44.py
index 500280210..97fca8dbc 100644
--- a/src/op_mode/show_vpp_nat44.py
+++ b/src/op_mode/vpp_nat_nat44.py
@@ -50,7 +50,7 @@ def _verify(func):
@wraps(func)
def _wrapper(*args, **kwargs):
config = ConfigTreeQuery()
- base = 'vpp nat44'
+ base = 'vpp nat nat44'
if not config.exists(base):
raise vyos.opmode.UnconfiguredSubsystem(f'{base} is not configured')