diff options
| author | Nataliia Solomko <natalirs1985@gmail.com> | 2026-02-13 12:29:00 +0200 |
|---|---|---|
| committer | Nataliia Solomko <natalirs1985@gmail.com> | 2026-02-13 20:20:31 +0200 |
| commit | 9bfe2749a1fa41a4c77a3364851ac1fbefbf3ef3 (patch) | |
| tree | 3fc0335466fb72306ce7304502c3a9bcc27e378d /src | |
| parent | 4d1b3346c60f77cced2acf87098ed959fbe5a500 (diff) | |
| download | vyos-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-x | src/conf_mode/interfaces_ethernet.py | 10 | ||||
| -rwxr-xr-x | src/conf_mode/vpp.py | 27 | ||||
| -rw-r--r-- | src/conf_mode/vpp_interfaces_bonding.py | 4 | ||||
| -rw-r--r-- | src/conf_mode/vpp_interfaces_gre.py | 4 | ||||
| -rw-r--r-- | src/conf_mode/vpp_interfaces_ipip.py | 4 | ||||
| -rw-r--r-- | src/conf_mode/vpp_interfaces_loopback.py | 4 | ||||
| -rw-r--r-- | src/conf_mode/vpp_interfaces_vxlan.py | 4 | ||||
| -rw-r--r-- | src/conf_mode/vpp_kernel-interfaces.py | 4 | ||||
| -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-8 | 34 | ||||
| -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') |
