X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_nat.py;h=a64b5709c72aa818003e6d48c9b007362322e398;hb=053204ab039d34a990ff0e14c32ce3b294fcce0e;hp=848d7225296d5dab07b72a004245ec95e6f47d8f;hpb=b7658201d958231ac7f5aeda6184d918893d2914;p=vpp.git diff --git a/test/test_nat.py b/test/test_nat.py index 848d7225296..a64b5709c72 100644 --- a/test/test_nat.py +++ b/test/test_nat.py @@ -25,6 +25,9 @@ from syslog_rfc5424_parser import SyslogMessage, ParseError from syslog_rfc5424_parser.constants import SyslogFacility, SyslogSeverity 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 @@ -83,29 +86,6 @@ class MethodHolder(VppTestCase): Clear NAT44 configuration. """ if hasattr(self, 'pg7') and hasattr(self, 'pg8'): - # I found no elegant way to do this - self.vapi.ip_add_del_route( - dst_address=self.pg7.remote_ip4n, - dst_address_length=32, - next_hop_address=self.pg7.remote_ip4n, - next_hop_sw_if_index=self.pg7.sw_if_index, - is_add=0) - self.vapi.ip_add_del_route( - dst_address=self.pg8.remote_ip4n, - dst_address_length=32, - next_hop_address=self.pg8.remote_ip4n, - next_hop_sw_if_index=self.pg8.sw_if_index, - is_add=0) - - for intf in [self.pg7, self.pg8]: - self.vapi.ip_neighbor_add_del( - intf.sw_if_index, - intf.remote_mac, - intf.remote_ip4, - flags=(VppEnum.vl_api_ip_neighbor_flags_t. - IP_API_NEIGHBOR_FLAG_STATIC), - is_add=0) - if self.pg7.has_ip4_config: self.pg7.unconfig_ip4() @@ -1525,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: @@ -1547,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 @@ -1577,13 +1557,13 @@ class TestNAT44(MethodHolder): is_add=1) # in2out - tcpn = self.statistics.get_counter( + tcpn = self.statistics.get_err_counter( '/err/nat44-in2out-slowpath/TCP packets') - udpn = self.statistics.get_counter( + udpn = self.statistics.get_err_counter( '/err/nat44-in2out-slowpath/UDP packets') - icmpn = self.statistics.get_counter( + icmpn = self.statistics.get_err_counter( '/err/nat44-in2out-slowpath/ICMP packets') - totaln = self.statistics.get_counter( + totaln = self.statistics.get_err_counter( '/err/nat44-in2out-slowpath/good in2out packets processed') pkts = self.create_stream_in(self.pg0, self.pg1) @@ -1593,24 +1573,25 @@ class TestNAT44(MethodHolder): capture = self.pg1.get_capture(len(pkts)) self.verify_capture_out(capture) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat44-in2out-slowpath/TCP packets') self.assertEqual(err - tcpn, 1) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat44-in2out-slowpath/UDP packets') self.assertEqual(err - udpn, 1) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat44-in2out-slowpath/ICMP packets') self.assertEqual(err - icmpn, 1) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat44-in2out-slowpath/good in2out packets processed') self.assertEqual(err - totaln, 3) # out2in - tcpn = self.statistics.get_counter('/err/nat44-out2in/TCP packets') - udpn = self.statistics.get_counter('/err/nat44-out2in/UDP packets') - icmpn = self.statistics.get_counter('/err/nat44-out2in/ICMP packets') - totaln = self.statistics.get_counter( + tcpn = self.statistics.get_err_counter('/err/nat44-out2in/TCP packets') + udpn = self.statistics.get_err_counter('/err/nat44-out2in/UDP packets') + icmpn = self.statistics.get_err_counter( + '/err/nat44-out2in/ICMP packets') + totaln = self.statistics.get_err_counter( '/err/nat44-out2in/good out2in packets processed') pkts = self.create_stream_out(self.pg1) @@ -1620,13 +1601,13 @@ class TestNAT44(MethodHolder): capture = self.pg0.get_capture(len(pkts)) self.verify_capture_in(capture, self.pg0) - err = self.statistics.get_counter('/err/nat44-out2in/TCP packets') + err = self.statistics.get_err_counter('/err/nat44-out2in/TCP packets') self.assertEqual(err - tcpn, 1) - err = self.statistics.get_counter('/err/nat44-out2in/UDP packets') + err = self.statistics.get_err_counter('/err/nat44-out2in/UDP packets') self.assertEqual(err - udpn, 1) - err = self.statistics.get_counter('/err/nat44-out2in/ICMP packets') + err = self.statistics.get_err_counter('/err/nat44-out2in/ICMP packets') self.assertEqual(err - icmpn, 1) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat44-out2in/good out2in packets processed') self.assertEqual(err - totaln, 3) @@ -2838,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 @@ -2883,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 @@ -2946,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 @@ -3158,31 +3139,32 @@ class TestNAT44(MethodHolder): capture = self.pg2.get_capture(len(pkts)) self.verify_capture_out(capture, nat_ip1) + def create_routes_and_neigbors(self): + r1 = VppIpRoute(self, self.pg7.remote_ip4, 32, + [VppRoutePath(self.pg7.remote_ip4, + self.pg7.sw_if_index)]) + r2 = VppIpRoute(self, self.pg8.remote_ip4, 32, + [VppRoutePath(self.pg8.remote_ip4, + self.pg8.sw_if_index)]) + r1.add_vpp_config() + r2.add_vpp_config() + + n1 = VppNeighbor(self, + self.pg7.sw_if_index, + self.pg7.remote_mac, + self.pg7.remote_ip4, + is_static=1) + n2 = VppNeighbor(self, + self.pg8.sw_if_index, + self.pg8.remote_mac, + self.pg8.remote_ip4, + is_static=1) + n1.add_vpp_config() + n2.add_vpp_config() + def test_dynamic_ipless_interfaces(self): """ NAT44 interfaces without configured IP address """ - - self.vapi.ip_neighbor_add_del( - self.pg7.sw_if_index, - self.pg7.remote_mac, - self.pg7.remote_ip4, - flags=(VppEnum.vl_api_ip_neighbor_flags_t. - IP_API_NEIGHBOR_FLAG_STATIC)) - self.vapi.ip_neighbor_add_del( - self.pg8.sw_if_index, - self.pg8.remote_mac, - self.pg8.remote_ip4, - flags=(VppEnum.vl_api_ip_neighbor_flags_t. - IP_API_NEIGHBOR_FLAG_STATIC)) - - self.vapi.ip_add_del_route(dst_address=self.pg7.remote_ip4n, - dst_address_length=32, - next_hop_address=self.pg7.remote_ip4n, - next_hop_sw_if_index=self.pg7.sw_if_index) - self.vapi.ip_add_del_route(dst_address=self.pg8.remote_ip4n, - dst_address_length=32, - next_hop_address=self.pg8.remote_ip4n, - next_hop_sw_if_index=self.pg8.sw_if_index) - + self.create_routes_and_neigbors() self.nat44_add_address(self.nat_addr) flags = self.config_flags.NAT_IS_INSIDE self.vapi.nat44_interface_add_del_feature( @@ -3211,28 +3193,7 @@ class TestNAT44(MethodHolder): def test_static_ipless_interfaces(self): """ NAT44 interfaces without configured IP address - 1:1 NAT """ - self.vapi.ip_neighbor_add_del( - self.pg7.sw_if_index, - self.pg7.remote_mac, - self.pg7.remote_ip4, - flags=(VppEnum.vl_api_ip_neighbor_flags_t. - IP_API_NEIGHBOR_FLAG_STATIC)) - self.vapi.ip_neighbor_add_del( - self.pg8.sw_if_index, - self.pg8.remote_mac, - self.pg8.remote_ip4, - flags=(VppEnum.vl_api_ip_neighbor_flags_t. - IP_API_NEIGHBOR_FLAG_STATIC)) - - self.vapi.ip_add_del_route(dst_address=self.pg7.remote_ip4n, - dst_address_length=32, - next_hop_address=self.pg7.remote_ip4n, - next_hop_sw_if_index=self.pg7.sw_if_index) - self.vapi.ip_add_del_route(dst_address=self.pg8.remote_ip4n, - dst_address_length=32, - next_hop_address=self.pg8.remote_ip4n, - next_hop_sw_if_index=self.pg8.sw_if_index) - + self.create_routes_and_neigbors() self.nat44_add_static_mapping(self.pg7.remote_ip4, self.nat_addr) flags = self.config_flags.NAT_IS_INSIDE self.vapi.nat44_interface_add_del_feature( @@ -3265,28 +3226,7 @@ class TestNAT44(MethodHolder): self.udp_port_out = 30607 self.icmp_id_out = 30608 - self.vapi.ip_neighbor_add_del( - self.pg7.sw_if_index, - self.pg7.remote_mac, - self.pg7.remote_ip4, - flags=(VppEnum.vl_api_ip_neighbor_flags_t. - IP_API_NEIGHBOR_FLAG_STATIC)) - self.vapi.ip_neighbor_add_del( - self.pg8.sw_if_index, - self.pg8.remote_mac, - self.pg8.remote_ip4, - flags=(VppEnum.vl_api_ip_neighbor_flags_t. - IP_API_NEIGHBOR_FLAG_STATIC)) - - self.vapi.ip_add_del_route(dst_address=self.pg7.remote_ip4n, - dst_address_length=32, - next_hop_address=self.pg7.remote_ip4n, - next_hop_sw_if_index=self.pg7.sw_if_index) - self.vapi.ip_add_del_route(dst_address=self.pg8.remote_ip4n, - dst_address_length=32, - next_hop_address=self.pg8.remote_ip4n, - next_hop_sw_if_index=self.pg8.sw_if_index) - + self.create_routes_and_neigbors() self.nat44_add_address(self.nat_addr) self.nat44_add_static_mapping(self.pg7.remote_ip4, self.nat_addr, self.tcp_port_in, self.tcp_port_out, @@ -3475,16 +3415,16 @@ class TestNAT44(MethodHolder): nat_ip_vrf10 = "10.0.0.10" nat_ip_vrf20 = "10.0.0.20" - self.vapi.ip_add_del_route(dst_address=self.pg3.remote_ip4n, - dst_address_length=32, - next_hop_address=self.pg3.remote_ip4n, - next_hop_sw_if_index=self.pg3.sw_if_index, - table_id=10) - self.vapi.ip_add_del_route(dst_address=self.pg3.remote_ip4n, - dst_address_length=32, - next_hop_address=self.pg3.remote_ip4n, - next_hop_sw_if_index=self.pg3.sw_if_index, - table_id=20) + r1 = VppIpRoute(self, self.pg3.remote_ip4, 32, + [VppRoutePath(self.pg3.remote_ip4, + self.pg3.sw_if_index)], + table_id=10) + r2 = VppIpRoute(self, self.pg3.remote_ip4, 32, + [VppRoutePath(self.pg3.remote_ip4, + self.pg3.sw_if_index)], + table_id=20) + r1.add_vpp_config() + r2.add_vpp_config() self.nat44_add_address(nat_ip_vrf10, vrf_id=10) self.nat44_add_address(nat_ip_vrf20, vrf_id=20) @@ -3655,9 +3595,11 @@ class TestNAT44(MethodHolder): self.logger.error(ppp("Unexpected or invalid packet:", p)) raise - err = self.statistics.get_counter('/err/nat44-classify/next in2out') + err = self.statistics.get_err_counter( + '/err/nat44-classify/next in2out') self.assertEqual(err, 1) - err = self.statistics.get_counter('/err/nat44-classify/next out2in') + err = self.statistics.get_err_counter( + '/err/nat44-classify/next out2in') self.assertEqual(err, 1) def test_del_session(self): @@ -3729,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( @@ -3910,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 @@ -4349,7 +4303,7 @@ class TestNAT44(MethodHolder): stats = self.statistics.get_counter('/nat44/ha/del-event-recv') self.assertEqual(stats[0][0], 1) - stats = self.statistics.get_counter('/err/nat-ha/pkts-processed') + stats = self.statistics.get_err_counter('/err/nat-ha/pkts-processed') self.assertEqual(stats, 2) # send HA session refresh event to failover/passive @@ -4393,7 +4347,7 @@ class TestNAT44(MethodHolder): stats = self.statistics.get_counter('/nat44/ha/refresh-event-recv') self.assertEqual(stats[0][0], 1) - stats = self.statistics.get_counter('/err/nat-ha/pkts-processed') + stats = self.statistics.get_err_counter('/err/nat-ha/pkts-processed') self.assertEqual(stats, 3) # send packet to test session created by HA @@ -4475,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 @@ -4487,49 +4441,54 @@ 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) cls.pg5.set_table_ip4(1) cls.pg5.config_ip4() cls.pg5.admin_up() - cls.vapi.ip_add_del_route(dst_address=cls.pg5.remote_ip4n, - dst_address_length=32, - next_hop_address=zero_ip4n, - next_hop_sw_if_index=cls.pg5.sw_if_index, - table_id=1) - - cls.pg6._local_ip4 = "10.1.2.1" - cls.pg6._local_ip4n = socket.inet_pton(socket.AF_INET, - cls.pg6.local_ip4) + r1 = VppIpRoute(cls, cls.pg5.remote_ip4, 32, + [VppRoutePath("0.0.0.0", + cls.pg5.sw_if_index)], + table_id=1, + register=False) + r1.add_vpp_config() + + 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) cls.pg6.set_table_ip4(1) cls.pg6.config_ip4() cls.pg6.admin_up() - cls.vapi.ip_add_del_route(dst_address=cls.pg6.remote_ip4n, - dst_address_length=32, - next_hop_address=zero_ip4n, - next_hop_sw_if_index=cls.pg6.sw_if_index, - table_id=1) - - cls.vapi.ip_add_del_route(dst_address=cls.pg6.remote_ip4n, - dst_address_length=16, - next_hop_address=zero_ip4n, table_id=0, - next_hop_table_id=1) - cls.vapi.ip_add_del_route(dst_address=zero_ip4n, - dst_address_length=0, - next_hop_address=zero_ip4n, table_id=1, - next_hop_table_id=0) - cls.vapi.ip_add_del_route(dst_address=zero_ip4n, - dst_address_length=0, - next_hop_address=cls.pg1.local_ip4n, - next_hop_sw_if_index=cls.pg1.sw_if_index, - table_id=0) + + r2 = VppIpRoute(cls, cls.pg6.remote_ip4, 32, + [VppRoutePath("0.0.0.0", + cls.pg6.sw_if_index)], + table_id=1, + register=False) + r3 = VppIpRoute(cls, cls.pg6.remote_ip4, 16, + [VppRoutePath("0.0.0.0", + 0xffffffff, + nh_table_id=1)], + table_id=0, + register=False) + r4 = VppIpRoute(cls, "0.0.0.0", 0, + [VppRoutePath("0.0.0.0", 0xffffffff, + nh_table_id=0)], + table_id=1, + register=False) + r5 = VppIpRoute(cls, "0.0.0.0", 0, + [VppRoutePath(cls.pg1.local_ip4, + cls.pg1.sw_if_index)], + register=False) + r2.add_vpp_config() + r3.add_vpp_config() + r4.add_vpp_config() + r5.add_vpp_config() cls.pg5.resolve_arp() cls.pg6.resolve_arp() @@ -4566,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 """ @@ -4734,13 +4703,13 @@ class TestNAT44EndpointDependent(MethodHolder): self.assertEqual(1, nat_config.endpoint_dependent) # in2out - tcpn = self.statistics.get_counter( + tcpn = self.statistics.get_err_counter( '/err/nat44-ed-in2out-slowpath/TCP packets') - udpn = self.statistics.get_counter( + udpn = self.statistics.get_err_counter( '/err/nat44-ed-in2out-slowpath/UDP packets') - icmpn = self.statistics.get_counter( + icmpn = self.statistics.get_err_counter( '/err/nat44-ed-in2out-slowpath/ICMP packets') - totaln = self.statistics.get_counter( + totaln = self.statistics.get_err_counter( '/err/nat44-ed-in2out-slowpath/good in2out packets processed') pkts = self.create_stream_in(self.pg0, self.pg1) @@ -4750,25 +4719,27 @@ class TestNAT44EndpointDependent(MethodHolder): capture = self.pg1.get_capture(len(pkts)) self.verify_capture_out(capture) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat44-ed-in2out-slowpath/TCP packets') self.assertEqual(err - tcpn, 1) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat44-ed-in2out-slowpath/UDP packets') self.assertEqual(err - udpn, 1) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat44-ed-in2out-slowpath/ICMP packets') self.assertEqual(err - icmpn, 1) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat44-ed-in2out-slowpath/good in2out packets processed') self.assertEqual(err - totaln, 3) # out2in - tcpn = self.statistics.get_counter('/err/nat44-ed-out2in/TCP packets') - udpn = self.statistics.get_counter('/err/nat44-ed-out2in/UDP packets') - icmpn = self.statistics.get_counter( + tcpn = self.statistics.get_err_counter( + '/err/nat44-ed-out2in/TCP packets') + udpn = self.statistics.get_err_counter( + '/err/nat44-ed-out2in/UDP packets') + icmpn = self.statistics.get_err_counter( '/err/nat44-ed-out2in-slowpath/ICMP packets') - totaln = self.statistics.get_counter( + totaln = self.statistics.get_err_counter( '/err/nat44-ed-out2in/good out2in packets processed') pkts = self.create_stream_out(self.pg1) @@ -4778,14 +4749,16 @@ class TestNAT44EndpointDependent(MethodHolder): capture = self.pg0.get_capture(len(pkts)) self.verify_capture_in(capture, self.pg0) - err = self.statistics.get_counter('/err/nat44-ed-out2in/TCP packets') + err = self.statistics.get_err_counter( + '/err/nat44-ed-out2in/TCP packets') self.assertEqual(err - tcpn, 1) - err = self.statistics.get_counter('/err/nat44-ed-out2in/UDP packets') + err = self.statistics.get_err_counter( + '/err/nat44-ed-out2in/UDP packets') self.assertEqual(err - udpn, 1) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat44-ed-out2in-slowpath/ICMP packets') self.assertEqual(err - icmpn, 1) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat44-ed-out2in/good out2in packets processed') self.assertEqual(err - totaln, 2) @@ -5810,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, @@ -6824,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() @@ -6931,11 +6904,11 @@ class TestNAT44Out2InDPO(MethodHolder): cls.pg1.config_ip6() cls.pg1.resolve_ndp() - cls.vapi.ip_add_del_route(dst_address=b'\x00' * 16, - dst_address_length=0, - next_hop_address=cls.pg1.remote_ip6n, - next_hop_sw_if_index=cls.pg1.sw_if_index, - is_ipv6=True) + r1 = VppIpRoute(cls, "::", 0, + [VppRoutePath(cls.pg1.remote_ip6, + cls.pg1.sw_if_index)], + register=False) + r1.add_vpp_config() except Exception: super(TestNAT44Out2InDPO, cls).tearDownClass() @@ -7604,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() @@ -7904,10 +7877,11 @@ class TestNAT64(MethodHolder): sw_if_index=self.pg1.sw_if_index) # in2out - tcpn = self.statistics.get_counter('/err/nat64-in2out/TCP packets') - udpn = self.statistics.get_counter('/err/nat64-in2out/UDP packets') - icmpn = self.statistics.get_counter('/err/nat64-in2out/ICMP packets') - totaln = self.statistics.get_counter( + tcpn = self.statistics.get_err_counter('/err/nat64-in2out/TCP packets') + udpn = self.statistics.get_err_counter('/err/nat64-in2out/UDP packets') + icmpn = self.statistics.get_err_counter( + '/err/nat64-in2out/ICMP packets') + totaln = self.statistics.get_err_counter( '/err/nat64-in2out/good in2out packets processed') pkts = self.create_stream_in_ip6(self.pg0, self.pg1) @@ -7918,21 +7892,22 @@ class TestNAT64(MethodHolder): self.verify_capture_out(capture, nat_ip=self.nat_addr, dst_ip=self.pg1.remote_ip4) - err = self.statistics.get_counter('/err/nat64-in2out/TCP packets') + err = self.statistics.get_err_counter('/err/nat64-in2out/TCP packets') self.assertEqual(err - tcpn, 1) - err = self.statistics.get_counter('/err/nat64-in2out/UDP packets') + err = self.statistics.get_err_counter('/err/nat64-in2out/UDP packets') self.assertEqual(err - udpn, 1) - err = self.statistics.get_counter('/err/nat64-in2out/ICMP packets') + err = self.statistics.get_err_counter('/err/nat64-in2out/ICMP packets') self.assertEqual(err - icmpn, 1) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat64-in2out/good in2out packets processed') self.assertEqual(err - totaln, 3) # out2in - tcpn = self.statistics.get_counter('/err/nat64-out2in/TCP packets') - udpn = self.statistics.get_counter('/err/nat64-out2in/UDP packets') - icmpn = self.statistics.get_counter('/err/nat64-out2in/ICMP packets') - totaln = self.statistics.get_counter( + tcpn = self.statistics.get_err_counter('/err/nat64-out2in/TCP packets') + udpn = self.statistics.get_err_counter('/err/nat64-out2in/UDP packets') + icmpn = self.statistics.get_err_counter( + '/err/nat64-out2in/ICMP packets') + totaln = self.statistics.get_err_counter( '/err/nat64-out2in/good out2in packets processed') pkts = self.create_stream_out(self.pg1, dst_ip=self.nat_addr) @@ -7943,13 +7918,13 @@ class TestNAT64(MethodHolder): ip = IPv6(src=''.join(['64:ff9b::', self.pg1.remote_ip4])) self.verify_capture_in_ip6(capture, ip[IPv6].src, self.pg0.remote_ip6) - err = self.statistics.get_counter('/err/nat64-out2in/TCP packets') + err = self.statistics.get_err_counter('/err/nat64-out2in/TCP packets') self.assertEqual(err - tcpn, 1) - err = self.statistics.get_counter('/err/nat64-out2in/UDP packets') + err = self.statistics.get_err_counter('/err/nat64-out2in/UDP packets') self.assertEqual(err - udpn, 1) - err = self.statistics.get_counter('/err/nat64-out2in/ICMP packets') + err = self.statistics.get_err_counter('/err/nat64-out2in/ICMP packets') self.assertEqual(err - icmpn, 1) - err = self.statistics.get_counter( + err = self.statistics.get_err_counter( '/err/nat64-out2in/good out2in packets processed') self.assertEqual(err - totaln, 3) @@ -8838,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 @@ -8866,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: @@ -8911,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 @@ -8965,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 @@ -9000,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: @@ -9377,11 +9352,10 @@ class TestDSliteCE(MethodHolder): aftr_ip6_n = socket.inet_pton(socket.AF_INET6, aftr_ip6) self.vapi.dslite_set_aftr_addr(ip4_addr=aftr_ip4, ip6_addr=aftr_ip6) - self.vapi.ip_add_del_route(dst_address=aftr_ip6_n, - dst_address_length=128, - next_hop_address=self.pg1.remote_ip6n, - next_hop_sw_if_index=self.pg1.sw_if_index, - is_ipv6=1) + r1 = VppIpRoute(self, aftr_ip6, 128, + [VppRoutePath(self.pg1.remote_ip6, + self.pg1.sw_if_index)]) + r1.add_vpp_config() # UDP encapsulation p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /