summaryrefslogtreecommitdiff
path: root/src/conf_mode/vpp_nat.py
diff options
context:
space:
mode:
authorNataliia Solomko <natalirs1985@gmail.com>2025-10-23 13:21:57 +0300
committerNataliia Solomko <natalirs1985@gmail.com>2025-10-23 13:22:57 +0300
commit3b6f7ea3406a22dcc6fd4bb50b1febfac7eab907 (patch)
tree692a6c425b822aa750ff79d81cb35a712ee200e7 /src/conf_mode/vpp_nat.py
parentd272b2509836403682c6c8ab4096ccf4be003bcb (diff)
downloadvyos-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.py32
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', [])