From 09d96f4a611fa989bfbbfb7e683d668dbe73ac1a Mon Sep 17 00:00:00 2001 From: Matus Fabian Date: Thu, 2 Feb 2017 01:43:00 -0800 Subject: 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 --- test/test_snat.py | 27 +++++++++++++++++++-------- test/vpp_papi_provider.py | 5 ++++- 2 files changed, 23 insertions(+), 9 deletions(-) (limited to 'test') diff --git a/test/test_snat.py b/test/test_snat.py index a67deede..967d4b37 100644 --- a/test/test_snat.py +++ b/test/test_snat.py @@ -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) / diff --git a/test/vpp_papi_provider.py b/test/vpp_papi_provider.py index 72c18e6c..2cd02cc7 100644 --- a/test/vpp_papi_provider.py +++ b/test/vpp_papi_provider.py @@ -883,6 +883,7 @@ class VppPapiProvider(object): external_port=0, addr_only=1, vrf_id=0, + protocol=0, is_add=1, is_ip4=1): """Add/delete S-NAT static mapping @@ -894,6 +895,7 @@ class VppPapiProvider(object): :param external_port: External port number (Default value = 0) :param addr_only: 1 if address only mapping, 0 if address and port :param vrf_id: VRF ID + :param protocol: IP protocol (Default value = 0) :param is_add: 1 if add, 0 if delete (Default value = 1) :param is_ip4: 1 if address type is IPv4 (Default value = 1) """ @@ -907,7 +909,8 @@ class VppPapiProvider(object): 'local_port': local_port, 'external_port': external_port, 'external_sw_if_index': external_sw_if_index, - 'vrf_id': vrf_id}) + 'vrf_id': vrf_id, + 'protocol': protocol}) def snat_add_address_range( self, -- cgit 1.2.3-korg