X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_nat.py;h=a64b5709c72aa818003e6d48c9b007362322e398;hb=053204ab039d34a990ff0e14c32ce3b294fcce0e;hp=bf22602059e8d079b9871446bc89c40852a267f4;hpb=097fa66b986f06281f603767d321ab13ab6c88c3;p=vpp.git diff --git a/test/test_nat.py b/test/test_nat.py index bf22602059e..a64b5709c72 100644 --- a/test/test_nat.py +++ b/test/test_nat.py @@ -27,6 +27,7 @@ from io import BytesIO from vpp_papi import VppEnum from vpp_ip_route import VppIpRoute, VppRoutePath, FibPathType from vpp_neighbor import VppNeighbor +from vpp_ip import VppIpAddress, VppIpPrefix from scapy.all import bind_layers, Packet, ByteEnumField, ShortField, \ IPField, IntField, LongField, XByteField, FlagsField, FieldLenField, \ PacketListField @@ -1504,16 +1505,16 @@ class TestNAT44(MethodHolder): cls.vapi.ip_table_add_del(is_add=1, table_id=10) cls.vapi.ip_table_add_del(is_add=1, table_id=20) - cls.pg4._local_ip4 = "172.16.255.1" - cls.pg4._local_ip4n = socket.inet_pton(socket.AF_INET, i.local_ip4) + cls.pg4._local_ip4 = VppIpPrefix("172.16.255.1", + cls.pg4.local_ip4_prefix.len) cls.pg4._remote_hosts[0]._ip4 = "172.16.255.2" cls.pg4.set_table_ip4(10) - cls.pg5._local_ip4 = "172.17.255.3" - cls.pg5._local_ip4n = socket.inet_pton(socket.AF_INET, i.local_ip4) + cls.pg5._local_ip4 = VppIpPrefix("172.17.255.3", + cls.pg5.local_ip4_prefix.len) cls.pg5._remote_hosts[0]._ip4 = "172.17.255.4" cls.pg5.set_table_ip4(10) - cls.pg6._local_ip4 = "172.16.255.1" - cls.pg6._local_ip4n = socket.inet_pton(socket.AF_INET, i.local_ip4) + cls.pg6._local_ip4 = VppIpPrefix("172.16.255.1", + cls.pg6.local_ip4_prefix.len) cls.pg6._remote_hosts[0]._ip4 = "172.16.255.2" cls.pg6.set_table_ip4(20) for i in cls.overlapping_interfaces: @@ -1526,10 +1527,10 @@ class TestNAT44(MethodHolder): cls.pg9.generate_remote_hosts(2) cls.pg9.config_ip4() - ip_addr_n = socket.inet_pton(socket.AF_INET, "10.0.0.1") cls.vapi.sw_interface_add_del_address( - sw_if_index=cls.pg9.sw_if_index, address=ip_addr_n, - address_length=24) + sw_if_index=cls.pg9.sw_if_index, + prefix=VppIpPrefix("10.0.0.1", 24).encode()) + cls.pg9.admin_up() cls.pg9.resolve_arp() cls.pg9._remote_hosts[1]._ip4 = cls.pg9._remote_hosts[0]._ip4 @@ -2818,7 +2819,7 @@ class TestNAT44(MethodHolder): capture = self.pg1.get_capture(len(pkts)) self.verify_capture_out(capture) self.nat44_add_address(self.nat_addr, is_add=0) - self.vapi.cli("ipfix flush") # FIXME this should be an API call + self.vapi.ipfix_flush() capture = self.pg3.get_capture(9) ipfix = IPFIXDecoder() # first load template @@ -2863,7 +2864,7 @@ class TestNAT44(MethodHolder): self.pg_start() self.pg1.assert_nothing_captured() sleep(1) - self.vapi.cli("ipfix flush") # FIXME this should be an API call + self.vapi.ipfix_flush() capture = self.pg3.get_capture(9) ipfix = IPFIXDecoder() # first load template @@ -2926,7 +2927,7 @@ class TestNAT44(MethodHolder): self.pg_start() self.pg1.assert_nothing_captured() sleep(1) - self.vapi.cli("ipfix flush") # FIXME this should be an API call + self.vapi.ipfix_flush() capture = self.pg3.get_capture(9) ipfix = IPFIXDecoder() # first load template @@ -3670,10 +3671,22 @@ class TestNAT44(MethodHolder): sw_if_index=self.pg1.sw_if_index, is_add=1) + reas_cfg1 = self.vapi.nat_get_reass() + # this test was intermittently failing in some cases + # until we temporarily bump the reassembly timeouts + self.vapi.nat_set_reass(timeout=20, max_reass=1024, max_frag=5, + drop_frag=0) + self.frag_in_order(proto=IP_PROTOS.tcp) self.frag_in_order(proto=IP_PROTOS.udp) self.frag_in_order(proto=IP_PROTOS.icmp) + # restore the reassembly timeouts + self.vapi.nat_set_reass(timeout=reas_cfg1.ip4_timeout, + max_reass=reas_cfg1.ip4_max_reass, + max_frag=reas_cfg1.ip4_max_frag, + drop_frag=reas_cfg1.ip4_drop_frag) + def test_frag_forwarding(self): """ NAT44 forwarding fragment test """ self.vapi.nat44_add_del_interface_addr( @@ -3851,7 +3864,7 @@ class TestNAT44(MethodHolder): self.pg_start() self.pg1.assert_nothing_captured() sleep(1) - self.vapi.cli("ipfix flush") # FIXME this should be an API call + self.vapi.ipfix_flush() capture = self.pg3.get_capture(9) ipfix = IPFIXDecoder() # first load template @@ -4416,10 +4429,10 @@ class TestNAT44EndpointDependent(MethodHolder): cls.pg4.generate_remote_hosts(2) cls.pg4.config_ip4() - ip_addr_n = socket.inet_pton(socket.AF_INET, "10.0.0.1") cls.vapi.sw_interface_add_del_address( - sw_if_index=cls.pg4.sw_if_index, address=ip_addr_n, - address_length=24) + sw_if_index=cls.pg4.sw_if_index, + prefix=VppIpPrefix("10.0.0.1", 24).encode()) + cls.pg4.admin_up() cls.pg4.resolve_arp() cls.pg4._remote_hosts[1]._ip4 = cls.pg4._remote_hosts[0]._ip4 @@ -4428,9 +4441,8 @@ class TestNAT44EndpointDependent(MethodHolder): zero_ip4n = socket.inet_pton(socket.AF_INET, "0.0.0.0") cls.vapi.ip_table_add_del(is_add=1, table_id=1) - cls.pg5._local_ip4 = "10.1.1.1" - cls.pg5._local_ip4n = socket.inet_pton(socket.AF_INET, - cls.pg5.local_ip4) + cls.pg5._local_ip4 = VppIpPrefix("10.1.1.1", + cls.pg5.local_ip4_prefix.len) cls.pg5._remote_hosts[0]._ip4 = "10.1.1.2" cls.pg5._remote_hosts[0]._ip4n = socket.inet_pton( socket.AF_INET, cls.pg5.remote_ip4) @@ -4444,9 +4456,8 @@ class TestNAT44EndpointDependent(MethodHolder): register=False) r1.add_vpp_config() - cls.pg6._local_ip4 = "10.1.2.1" - cls.pg6._local_ip4n = socket.inet_pton(socket.AF_INET, - cls.pg6.local_ip4) + cls.pg6._local_ip4 = VppIpPrefix("10.1.2.1", + cls.pg6.local_ip4_prefix.len) cls.pg6._remote_hosts[0]._ip4 = "10.1.2.2" cls.pg6._remote_hosts[0]._ip4n = socket.inet_pton( socket.AF_INET, cls.pg6.remote_ip4) @@ -4514,7 +4525,17 @@ class TestNAT44EndpointDependent(MethodHolder): sw_if_index=self.pg1.sw_if_index, is_add=1) self.vapi.nat44_forwarding_enable_disable(enable=True) + reas_cfg1 = self.vapi.nat_get_reass() + # this test was intermittently failing in some cases + # until we temporarily bump the reassembly timeouts + self.vapi.nat_set_reass(timeout=20, max_reass=1024, max_frag=5, + drop_frag=0) self.frag_in_order(proto=IP_PROTOS.tcp, dont_translate=True) + # restore the reassembly timeouts + self.vapi.nat_set_reass(timeout=reas_cfg1.ip4_timeout, + max_reass=reas_cfg1.ip4_max_reass, + max_frag=reas_cfg1.ip4_max_frag, + drop_frag=reas_cfg1.ip4_drop_frag) def test_frag_out_of_order(self): """ NAT44 translate fragments arriving out of order """ @@ -5762,7 +5783,7 @@ class TestNAT44EndpointDependent(MethodHolder): self.config_flags.NAT_IS_EXT_HOST_VALID) self.assertTrue(sessions[0].flags & self.config_flags.NAT_IS_TWICE_NAT) - self.logger.error(self.vapi.cli("show nat44 sessions detail")) + self.logger.info(self.vapi.cli("show nat44 sessions detail")) self.vapi.nat44_del_session( address=sessions[0].inside_ip_address, port=sessions[0].inside_port, @@ -6776,7 +6797,7 @@ class TestNAT44EndpointDependent(MethodHolder): capture = self.pg1.assert_nothing_captured() # verify IPFIX logging - self.vapi.cli("ipfix flush") # FIXME this should be an API call + self.vapi.ipfix_flush() sleep(1) capture = self.pg2.get_capture(10) ipfix = IPFIXDecoder() @@ -7556,7 +7577,7 @@ class TestDeterministicNAT(MethodHolder): self.assertEqual(1000, dms[0].ses_num) # verify IPFIX logging - self.vapi.cli("ipfix flush") # FIXME this should be an API call + self.vapi.ipfix_flush() sleep(1) capture = self.pg2.get_capture(2) ipfix = IPFIXDecoder() @@ -8792,7 +8813,7 @@ class TestNAT64(MethodHolder): self.pg_start() self.pg1.assert_nothing_captured() sleep(1) - self.vapi.cli("ipfix flush") # FIXME this should be an API call + self.vapi.ipfix_flush() capture = self.pg3.get_capture(9) ipfix = IPFIXDecoder() # first load template @@ -8820,7 +8841,7 @@ class TestNAT64(MethodHolder): self.pg_start() self.pg1.assert_nothing_captured() sleep(1) - self.vapi.cli("ipfix flush") # FIXME this should be an API call + self.vapi.ipfix_flush() capture = self.pg3.get_capture(1) # verify events in data set for p in capture: @@ -8865,7 +8886,7 @@ class TestNAT64(MethodHolder): self.pg_start() self.pg1.assert_nothing_captured() sleep(1) - self.vapi.cli("ipfix flush") # FIXME this should be an API call + self.vapi.ipfix_flush() capture = self.pg3.get_capture(9) ipfix = IPFIXDecoder() # first load template @@ -8919,7 +8940,7 @@ class TestNAT64(MethodHolder): self.pg_start() p = self.pg1.get_capture(1) self.tcp_port_out = p[0][TCP].sport - self.vapi.cli("ipfix flush") # FIXME this should be an API call + self.vapi.ipfix_flush() capture = self.pg3.get_capture(10) ipfix = IPFIXDecoder() # first load template @@ -8954,7 +8975,7 @@ class TestNAT64(MethodHolder): end_addr=self.nat_addr, vrf_id=0xFFFFFFFF, is_add=0) - self.vapi.cli("ipfix flush") # FIXME this should be an API call + self.vapi.ipfix_flush() capture = self.pg3.get_capture(2) # verify events in data set for p in capture: