summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/vyos/vpp/control_vpp.py15
-rw-r--r--python/vyos/vpp/nat/nat44.py81
2 files changed, 88 insertions, 8 deletions
diff --git a/python/vyos/vpp/control_vpp.py b/python/vyos/vpp/control_vpp.py
index 2c81b2db2..9d45bbd91 100644
--- a/python/vyos/vpp/control_vpp.py
+++ b/python/vyos/vpp/control_vpp.py
@@ -160,6 +160,21 @@ class VPPControl:
return iface.sw_if_index
return None
+ @_Decorators.api_call
+ def get_interface_name(self, index: int) -> str | None:
+ """Find interface name by interface index in VPP
+
+ Args:
+ index (int): interface index inside VPP
+
+ Returns:
+ str | None: Interface name or None (if was not found)
+ """
+ for iface in self.__vpp_api_client.api.sw_interface_dump():
+ if iface.sw_if_index == index:
+ return iface.interface_name
+ return None
+
@_Decorators.check_retval
@_Decorators.api_call
def lcp_pair_add(
diff --git a/python/vyos/vpp/nat/nat44.py b/python/vyos/vpp/nat/nat44.py
index 47d0ced1d..985e5a583 100644
--- a/python/vyos/vpp/nat/nat44.py
+++ b/python/vyos/vpp/nat/nat44.py
@@ -86,38 +86,34 @@ class Nat44:
is_add=False,
)
- # needs to check
def add_nat44_interface_inside(self):
"""Add NAT44 interface"""
self.vpp.api.nat44_interface_add_del_feature(
- flags=1,
+ flags=0x20,
sw_if_index=self.vpp.get_sw_if_index(self.interface_in),
is_add=True,
)
- # needs to check
def delete_nat44_interface_inside(self):
"""Delete NAT44 interface"""
self.vpp.api.nat44_interface_add_del_feature(
- flags=1,
+ flags=0x20,
sw_if_index=self.vpp.get_sw_if_index(self.interface_in),
is_add=False,
)
- # needs to check
def add_nat44_interface_outside(self):
"""Add NAT44 interface"""
self.vpp.api.nat44_interface_add_del_feature(
- flags=0,
+ flags=0x10,
sw_if_index=self.vpp.get_sw_if_index(self.interface_out),
is_add=True,
)
- # needs to check
def delete_nat44_interface_outside(self):
"""Delete NAT44 interface"""
self.vpp.api.nat44_interface_add_del_feature(
- flags=0,
+ flags=0x10,
sw_if_index=self.vpp.get_sw_if_index(self.interface_out),
is_add=False,
)
@@ -149,3 +145,72 @@ class Nat44:
def enable_ipfix(self):
"""Enable NAT44 IPFIX logging"""
self.vpp.api.nat44_ei_ipfix_enable_disable(enable=True)
+
+
+class Nat44Static(Nat44):
+ def __init__(self):
+ self.vpp = VPPControl()
+
+ def add_inbound_interface(self, interface_in):
+ self.interface_in = interface_in
+ self.add_nat44_interface_inside()
+
+ def delete_inbound_interface(self, interface_in):
+ self.interface_in = interface_in
+ self.delete_nat44_interface_inside()
+
+ def add_outbound_interface(self, interface_out):
+ self.interface_out = interface_out
+ self.add_nat44_interface_outside()
+
+ def delete_outbound_interface(self, interface_out):
+ self.interface_out = interface_out
+ self.delete_nat44_interface_outside()
+
+ def add_nat44_static_mapping(
+ self,
+ iface_out,
+ local_ip,
+ external_ip,
+ local_port,
+ external_port,
+ protocol,
+ use_iface,
+ ):
+ """Add NAT44 static mapping"""
+ self.vpp.api.nat44_add_del_static_mapping_v2(
+ local_ip_address=local_ip,
+ external_ip_address=external_ip,
+ protocol=protocol,
+ local_port=local_port,
+ external_port=external_port,
+ flags=0x08 if not (protocol or local_port) else 0x00,
+ external_sw_if_index=(
+ self.vpp.get_sw_if_index(iface_out) if use_iface else 0xFFFFFFFF
+ ),
+ is_add=True,
+ )
+
+ def delete_nat44_static_mapping(
+ self,
+ iface_out,
+ local_ip,
+ external_ip,
+ local_port,
+ external_port,
+ protocol,
+ use_iface,
+ ):
+ """Delete NAT44 static mapping"""
+ self.vpp.api.nat44_add_del_static_mapping_v2(
+ local_ip_address=local_ip,
+ external_ip_address=external_ip,
+ protocol=protocol,
+ local_port=local_port,
+ external_port=external_port,
+ flags=0x08 if not (protocol or local_port) else 0x00,
+ external_sw_if_index=(
+ self.vpp.get_sw_if_index(iface_out) if use_iface else 0xFFFFFFFF
+ ),
+ is_add=False,
+ )