SNAT: Port allocation per protocol

Ports are allocated per protocol (UDP, TCP, ICMP)
1:1 NAT with port is configured for specific protocol

Change-Id: I37ae5eed3715b223d0620d4fdaed7a482bb7a834
Signed-off-by: Matus Fabian <matfabia@cisco.com>
This commit is contained in:
Matus Fabian
2017-02-02 01:43:00 -08:00
parent 85bb917289
commit 09d96f4a61
9 changed files with 242 additions and 140 deletions

View File

@ -292,6 +292,7 @@ class TestSNAT(VppTestCase):
external_port=sm.external_port,
addr_only=sm.addr_only,
vrf_id=sm.vrf_id,
protocol=sm.protocol,
is_add=0)
adresses = self.vapi.snat_address_dump()
@ -302,7 +303,8 @@ class TestSNAT(VppTestCase):
def snat_add_static_mapping(self, local_ip, external_ip='0.0.0.0',
local_port=0, external_port=0, vrf_id=0,
is_add=1, external_sw_if_index=0xFFFFFFFF):
is_add=1, external_sw_if_index=0xFFFFFFFF,
proto=0):
"""
Add/delete S-NAT static mapping
@ -313,6 +315,7 @@ class TestSNAT(VppTestCase):
:param vrf_id: VRF ID (Default 0)
:param is_add: 1 if add, 0 if delete (Default add)
:param external_sw_if_index: External interface instead of IP address
:param proto: IP protocol (Mandatory if port specified)
"""
addr_only = 1
if local_port and external_port:
@ -327,6 +330,7 @@ class TestSNAT(VppTestCase):
external_port,
addr_only,
vrf_id,
proto,
is_add)
def snat_add_address(self, ip, is_add=1):
@ -430,11 +434,14 @@ class TestSNAT(VppTestCase):
self.snat_add_address(self.snat_addr)
self.snat_add_static_mapping(self.pg0.remote_ip4, self.snat_addr,
self.tcp_port_in, self.tcp_port_out)
self.tcp_port_in, self.tcp_port_out,
proto=IP_PROTOS.tcp)
self.snat_add_static_mapping(self.pg0.remote_ip4, self.snat_addr,
self.udp_port_in, self.udp_port_out)
self.udp_port_in, self.udp_port_out,
proto=IP_PROTOS.udp)
self.snat_add_static_mapping(self.pg0.remote_ip4, self.snat_addr,
self.icmp_id_in, self.icmp_id_out)
self.icmp_id_in, self.icmp_id_out,
proto=IP_PROTOS.icmp)
self.vapi.snat_interface_add_del_feature(self.pg0.sw_if_index)
self.vapi.snat_interface_add_del_feature(self.pg1.sw_if_index,
is_inside=0)
@ -464,11 +471,14 @@ class TestSNAT(VppTestCase):
self.snat_add_address(self.snat_addr)
self.snat_add_static_mapping(self.pg0.remote_ip4, self.snat_addr,
self.tcp_port_in, self.tcp_port_out)
self.tcp_port_in, self.tcp_port_out,
proto=IP_PROTOS.tcp)
self.snat_add_static_mapping(self.pg0.remote_ip4, self.snat_addr,
self.udp_port_in, self.udp_port_out)
self.udp_port_in, self.udp_port_out,
proto=IP_PROTOS.udp)
self.snat_add_static_mapping(self.pg0.remote_ip4, self.snat_addr,
self.icmp_id_in, self.icmp_id_out)
self.icmp_id_in, self.icmp_id_out,
proto=IP_PROTOS.icmp)
self.vapi.snat_interface_add_del_feature(self.pg0.sw_if_index)
self.vapi.snat_interface_add_del_feature(self.pg1.sw_if_index,
is_inside=0)
@ -685,7 +695,8 @@ class TestSNAT(VppTestCase):
is_inside=0)
# add static mapping for server
self.snat_add_static_mapping(server.ip4, self.snat_addr,
server_in_port, server_out_port)
server_in_port, server_out_port,
proto=IP_PROTOS.tcp)
# send packet from host to server
p = (Ether(src=host.mac, dst=self.pg0.local_mac) /