diff options
| author | Nataliia Solomko <natalirs1985@gmail.com> | 2025-10-23 13:21:57 +0300 |
|---|---|---|
| committer | Nataliia Solomko <natalirs1985@gmail.com> | 2025-10-23 13:22:57 +0300 |
| commit | 3b6f7ea3406a22dcc6fd4bb50b1febfac7eab907 (patch) | |
| tree | 692a6c425b822aa750ff79d81cb35a712ee200e7 /src/conf_mode/vpp_nat.py | |
| parent | d272b2509836403682c6c8ab4096ccf4be003bcb (diff) | |
| download | vyos-1x-3b6f7ea3406a22dcc6fd4bb50b1febfac7eab907.tar.gz vyos-1x-3b6f7ea3406a22dcc6fd4bb50b1febfac7eab907.zip | |
T7949: VPP add the ability to configure bond subinterfaces for NAT
Diffstat (limited to 'src/conf_mode/vpp_nat.py')
| -rw-r--r-- | src/conf_mode/vpp_nat.py | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/conf_mode/vpp_nat.py b/src/conf_mode/vpp_nat.py index 0425159b4..468424016 100644 --- a/src/conf_mode/vpp_nat.py +++ b/src/conf_mode/vpp_nat.py @@ -26,7 +26,9 @@ from vyos.config import Config from vyos.utils.network import get_interface_address from vyos.vpp.utils import cli_ifaces_list +from vyos.vpp.utils import vpp_iface_name_transform from vyos.vpp.nat.nat44 import Nat44 +from vyos.vpp.control_vpp import VPPControl protocol_map = { @@ -155,16 +157,14 @@ def verify(config): f'Both inside and outside interfaces must be configured. Please add: {", ".join(missing_keys)}' ) - for interface in config['interface']['inside']: - if interface not in config['vpp_ifaces']: - raise ConfigError( - f'{interface} must be a VPP interface for inside NAT interface' - ) - for interface in config['interface']['outside']: - if interface not in config['vpp_ifaces']: - raise ConfigError( - f'{interface} must be a VPP interface for outside NAT interface' - ) + vpp = VPPControl() + for direction in ['inside', 'outside']: + for interface in config['interface'][direction]: + vpp_iface_name = vpp_iface_name_transform(interface) + if vpp.get_sw_if_index(vpp_iface_name) is None: + raise ConfigError( + f'{interface} must be a VPP interface for {direction} NAT interface' + ) if not config.get('address_pool', {}).get('translation') and not config.get( 'static', {} @@ -371,11 +371,13 @@ def apply(config): # Delete inside interfaces for interface in remove_config['interface']['inside']: if interface not in config.get('interface', {}).get('inside', []): - n.delete_nat44_interface_inside(interface) + vpp_iface_name = vpp_iface_name_transform(interface) + n.delete_nat44_interface_inside(vpp_iface_name) # Delete outside interfaces for interface in remove_config['interface']['outside']: if interface not in config.get('interface', {}).get('outside', []): - n.delete_nat44_interface_outside(interface) + vpp_iface_name = vpp_iface_name_transform(interface) + n.delete_nat44_interface_outside(vpp_iface_name) # Delete address pool address_pool = config.get('address_pool', {}) for address in ( @@ -445,10 +447,12 @@ def apply(config): # Add inside interfaces for interface in config['interface']['inside']: - n.add_nat44_interface_inside(interface) + vpp_iface_name = vpp_iface_name_transform(interface) + n.add_nat44_interface_inside(vpp_iface_name) # Add outside interfaces for interface in config['interface']['outside']: - n.add_nat44_interface_outside(interface) + vpp_iface_name = vpp_iface_name_transform(interface) + n.add_nat44_interface_outside(vpp_iface_name) # Add translation pool for address in ( config.get('address_pool', {}).get('translation', {}).get('address', []) |
