From patchwork Thu Dec 22 09:37:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ke Xu X-Patchwork-Id: 121286 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id DB257A034C; Thu, 22 Dec 2022 10:38:54 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D0FA640698; Thu, 22 Dec 2022 10:38:54 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 50BEF400D7 for ; Thu, 22 Dec 2022 10:38:52 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1671701933; x=1703237933; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+1VCE3RvMJyTR1txYl7+gw1fFwMhuu2M7Z1uY+UC0DM=; b=G87rIKISOqOyryySLDfFsO7W1a3uKBiavElpyUGzOqj0aqnJ62TEGF0Z Cn9zl1r7XVqjfGRjVEqJHqz+pCRrhBZxcicx4MatKEF6eUW333dx70E+/ LP2HlaW0hFUM5yKDC77QdANCvGcypzyTo/FbqHIvixQUVVKmQy8ph7t0B o6tDY88Ak5hptrjXfBTjLEH5Gco+kjItRbNxBQbjCdleiOepVBSlKvyqn jjiQXyi+5YeImKJqkdGyVclmiiLCxgI2K+LF69zHaoU+QRsuqBaZSQxMC KmMFgStJXpioV6n+gPDDXSxFFWwg+LjxZccT2YFXrw7zlPPZd8TRZpQt0 A==; X-IronPort-AV: E=McAfee;i="6500,9779,10568"; a="299758302" X-IronPort-AV: E=Sophos;i="5.96,265,1665471600"; d="scan'208";a="299758302" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Dec 2022 01:38:52 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10568"; a="684130072" X-IronPort-AV: E=Sophos;i="5.96,265,1665471600"; d="scan'208";a="684130072" Received: from dpdk-xuke-lab.sh.intel.com ([10.67.119.8]) by orsmga001.jf.intel.com with ESMTP; 22 Dec 2022 01:38:50 -0800 From: Ke Xu To: dts@dpdk.org Cc: weiyuanx.li@intel.com, qi.fu@intel.com, lijuan.tu@intel.com, Ke Xu Subject: [DTS][PATCH V4 1/5] tests/vf_offload: fix 2 typos and a bug. Date: Thu, 22 Dec 2022 17:37:11 +0800 Message-Id: <20221222093715.116863-2-ke1.xu@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221222093715.116863-1-ke1.xu@intel.com> References: <20221222093715.116863-1-ke1.xu@intel.com> MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Checksum is wrongly spelled as checksup. Finally is wrongly spelled as fially. String formating is wrongly put out side of the function call. Signed-off-by: Ke Xu --- tests/TestSuite_vf_offload.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/TestSuite_vf_offload.py b/tests/TestSuite_vf_offload.py index 75c75f05..55d0ae85 100644 --- a/tests/TestSuite_vf_offload.py +++ b/tests/TestSuite_vf_offload.py @@ -265,7 +265,7 @@ class TestVfOffload(TestCase): ( ip_checksum, tcp_checksum, - udp_checksup, + udp_checksum, sctp_checksum, ) = packet_received.split(";") print( @@ -273,8 +273,8 @@ class TestVfOffload(TestCase): ip_checksum, "tcp_checksum:, ", tcp_checksum, - "udp_checksup: ", - udp_checksup, + "udp_checksum: ", + udp_checksum, "sctp_checksum: ", sctp_checksum, ) @@ -284,9 +284,9 @@ class TestVfOffload(TestCase): if tcp_checksum != "??": packet_type = "TCP" l4_checksum = tcp_checksum - elif udp_checksup != "??": + elif udp_checksum != "??": packet_type = "UDP" - l4_checksum = udp_checksup + l4_checksum = udp_checksum elif sctp_checksum != "??": packet_type = "SCTP" l4_checksum = sctp_checksum @@ -435,7 +435,7 @@ class TestVfOffload(TestCase): command = ("tcpdump -w tcpdump_{0}.pcap -i {0} 2>tcpdump_{0}.out &").format( iface ) - self.tester.send_expect("rm -f tcpdump_{0}.pcap", "#").format(iface) + self.tester.send_expect("rm -f tcpdump_{0}.pcap".format(iface), "#") self.tester.send_expect(command, "#") def tcpdump_stop_sniff(self): @@ -474,8 +474,8 @@ class TestVfOffload(TestCase): Execute scanner to return results """ scanner_result = self.tester.send_expect(scanner, "#") - fially_result = re.findall(r"length( \d+)", scanner_result) - return list(fially_result) + finally_result = re.findall(r"length( \d+)", scanner_result) + return list(finally_result) def number_of_bytes(self, iface): """ From patchwork Thu Dec 22 09:37:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ke Xu X-Patchwork-Id: 121287 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 301B6A034C; Thu, 22 Dec 2022 10:38:57 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2A5FD427EB; Thu, 22 Dec 2022 10:38:57 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 057A8427EB for ; Thu, 22 Dec 2022 10:38:54 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1671701935; x=1703237935; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6AMoMZFZAh+m7M8ghXtyWvVrD8mSYAdVBV3apWivfQE=; b=Y0g6+b0Ri9StZ5BIjCOX7Bnu8rRapkXGMTBwfjXtAoeExLbxaY1duJPl /IgTq8zDz4wk/gauOgE5JWrT30j1/Xrrt1G2LcQdO/KnqfOgaa48aOCXK j11SuJ/K3KlxByUBRuZGxj2Ce92D2Yp71xtb4D5Y7uThOaOmoytvswUAd qgptb6E2PeqBtgxMv3X/jxqDB4vGdZ+kdu+I+d/jKOZ1O0LIMVTn3xHZ8 alCAkFdFpzuG5q7gOKU/rWxr+/bEhEWviBCL2Z9xXT+Fhlorq2tU4E3PD hOmWxmuOLLAei85r+Vu4/5dZDcJe7/JWKiwvMMI/witouOYXw+79xvcGx A==; X-IronPort-AV: E=McAfee;i="6500,9779,10568"; a="299758314" X-IronPort-AV: E=Sophos;i="5.96,265,1665471600"; d="scan'208";a="299758314" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Dec 2022 01:38:54 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10568"; a="684130089" X-IronPort-AV: E=Sophos;i="5.96,265,1665471600"; d="scan'208";a="684130089" Received: from dpdk-xuke-lab.sh.intel.com ([10.67.119.8]) by orsmga001.jf.intel.com with ESMTP; 22 Dec 2022 01:38:52 -0800 From: Ke Xu To: dts@dpdk.org Cc: weiyuanx.li@intel.com, qi.fu@intel.com, lijuan.tu@intel.com, Ke Xu Subject: [DTS][PATCH V4 2/5] tests/vf_offload: add vf checksum hw offload case for tunneling packets. Date: Thu, 22 Dec 2022 17:37:12 +0800 Message-Id: <20221222093715.116863-3-ke1.xu@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221222093715.116863-1-ke1.xu@intel.com> References: <20221222093715.116863-1-ke1.xu@intel.com> MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org In DPDK 22.11, tunneling packets checksum offload for inner and outer checksum is supported. This case supporting validation these packets. Signed-off-by: Weiyuan Li Signed-off-by: Ke Xu --- tests/TestSuite_vf_offload.py | 214 +++++++++++++++++++++++++++++++++- 1 file changed, 212 insertions(+), 2 deletions(-) diff --git a/tests/TestSuite_vf_offload.py b/tests/TestSuite_vf_offload.py index 55d0ae85..a6d61e47 100644 --- a/tests/TestSuite_vf_offload.py +++ b/tests/TestSuite_vf_offload.py @@ -1,5 +1,5 @@ # SPDX-License-Identifier: BSD-3-Clause -# Copyright(c) 2020 Intel Corporation +# Copyright(c) 2020-2022 Intel Corporation # import re @@ -10,7 +10,7 @@ import framework.utils as utils from framework.crb import Crb from framework.pmd_output import PmdOutput from framework.settings import DPDK_DCFMODE_SETTING, HEADER_SIZE, load_global_setting -from framework.test_case import TestCase +from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg from framework.utils import GREEN, RED from framework.virt_common import VM from nics.net_device import NetDevice @@ -196,6 +196,18 @@ class TestVfOffload(TestCase): dut.send_expect("csum set sctp hw %d" % port, "testpmd>") dut.send_expect("port start all", "testpmd>") + def checksum_enablehw_tunnel(self, port, dut): + dut.send_expect("port stop %d" % port, "testpmd>") + dut.send_expect("csum set ip hw %d" % port, "testpmd>") + dut.send_expect("csum set udp hw %d" % port, "testpmd>") + dut.send_expect("csum set tcp hw %d" % port, "testpmd>") + dut.send_expect("csum set sctp hw %d" % port, "testpmd>") + dut.send_expect("csum set outer-ip hw %d" % port, "testpmd>") + dut.send_expect("csum set outer-udp hw %d" % port, "testpmd>") + dut.send_expect("csum parse-tunnel on %d" % port, "testpmd>") + dut.send_expect("rx_vxlan_port add 4789 %d" % port, "testpmd>") + dut.send_expect("port start %d" % port, "testpmd>") + def checksum_enablesw(self, port, dut): dut.send_expect("port stop all", "testpmd>") dut.send_expect("csum set ip sw %d" % port, "testpmd>") @@ -365,6 +377,204 @@ class TestVfOffload(TestCase): self.verify(len(result) == 0, ",".join(list(result.values()))) + def checksum_validate_tunnel(self, packets_sent, packets_expected): + """ + Validate the checksum. + """ + tx_interface = self.tester.get_interface( + self.tester.get_local_port(self.dut_ports[0]) + ) + rx_interface = self.tester.get_interface( + self.tester.get_local_port(self.dut_ports[1]) + ) + sniff_src = self.vm0_testpmd.get_port_mac(0) + checksum_pattern = re.compile("chksum.*=.*(0x[0-9a-z]+)") + sniff_src = "52:00:00:00:00:00" + chksum = dict() + # self.tester.send_expect("scapy", ">>> ") + + for packet_type in list(packets_expected.keys()): + self.tester.send_expect("scapy", ">>> ") + self.tester.send_expect("p = %s" % packets_expected[packet_type], ">>>") + out = self.tester.send_expect("p.show2()", ">>>") + chksums = checksum_pattern.findall(out) + expected_chksum = chksums + chksum[packet_type] = chksums + print(packet_type, ": ", chksums) + + self.tester.send_expect("exit()", "#") + + self.tester.scapy_background() + inst = self.tester.tcpdump_sniff_packets( + intf=rx_interface, + count=len(packets_sent), + filters=[{"layer": "ether", "config": {"src": sniff_src}}], + ) + + # Send packet. + self.tester.scapy_foreground() + + self.tester.scapy_append( + 'sendp([%s], iface="%s")' % (packets_sent[packet_type], tx_interface) + ) + self.tester.scapy_execute() + out = self.tester.scapy_get_result() + p = self.tester.load_tcpdump_sniff_packets(inst) + nr_packets = len(p) + print(p) + packets_received = [ + p[i].sprintf( + "%IP.chksum%;%UDP.chksum%;%IP:2.chksum%;%UDP:2.chksum%;%TCP.chksum%;%SCTP.chksum%" + ) + for i in range(nr_packets) + ] + + packets_received = [ + item + for item in packets_received[0].replace("??", "").split(";") + if item != "" + ] + self.logger.debug(f"packets_received=>{packets_received}") + self.logger.debug(f"expected_chksum=>{expected_chksum}") + self.verify( + len(expected_chksum) == len(packets_received), + f"The chksum type {packet_type} length of the actual result is inconsistent with the expected length!", + ) + self.verify( + packets_received == expected_chksum, + f"The actually received chksum {packet_type} is inconsistent with the expectation", + ) + + @check_supported_nic( + ["ICE_100G-E810C_QSFP", "ICE_25G-E810C_SFP", "ICE_25G-E810_XXV_SFP"] + ) + @skip_unsupported_pkg(["os default"]) + def test_checksum_offload_tunnel_enable(self): + """ + Enable HW checksum offload. + Send packet with inner and outer incorrect checksum, + can rx it and report the checksum error, + verify forwarded packets have correct checksum. + """ + self.launch_testpmd( + dcf_flag=self.dcf_mode, + param="--portmask=%s " % (self.portMask) + "--enable-rx-cksum " + "", + ) + self.vm0_testpmd.execute_cmd("set fwd csum") + self.vm0_testpmd.execute_cmd("set promisc 1 on") + self.vm0_testpmd.execute_cmd("set promisc 0 on") + self.vm0_testpmd.execute_cmd("csum mac-swap off 0", "testpmd>") + self.vm0_testpmd.execute_cmd("csum mac-swap off 1", "testpmd>") + time.sleep(2) + port_id_0 = 0 + mac = self.vm0_testpmd.get_port_mac(0) + sndIP = "10.0.0.1" + sndIPv6 = "::1" + expIP = sndIP + expIPv6 = sndIPv6 + + pkts_outer = { + "IP/UDP/VXLAN-GPE": f'IP(src = "{sndIP}") / UDP(sport = 4790, dport = 4790, chksum = 0xff) / VXLAN()', + "IP/UDP/VXLAN-GPE/ETH": f'IP(src = "{sndIP}") / UDP(sport = 4790, dport = 4790, chksum = 0xff) / VXLAN() / Ether()', + "IPv6/UDP/VXLAN-GPE": f'IPv6(src = "{sndIPv6}") / UDP(sport = 4790, dport = 4790, chksum = 0xff) / VXLAN()', + "IPv6/UDP/VXLAN-GPE/ETH": f'IPv6(src = "{sndIPv6}") / UDP(sport = 4790, dport = 4790, chksum = 0xff) / VXLAN() / Ether()', + "IP/GRE": f'IP(src = "{sndIP}", proto = 47, chksum = 0xff) / GRE()', + "IP/GRE/ETH": f'IP(src = "{sndIP}", proto = 47, chksum = 0xff) / GRE() / Ether()', + "IP/NVGRE/ETH": f'IP(src = "{sndIP}", proto = 47, chksum = 0xff) / GRE(key_present=1, proto=0x6558, key=0x00000100) / Ether()', + "IPv6/GRE": f'IPv6(src = "{sndIPv6}", nh = 47) / GRE()', + "IPv6/GRE/ETH": f'IPv6(src = "{sndIPv6}", nh = 47) / GRE() / Ether()', + "IPv6/NVGRE/ETH": f'IPv6(src = "{sndIPv6}", nh = 47) / GRE(key_present=1, proto=0x6558, key=0x00000100) / Ether()', + "IP/UDP/GTPU": f'IP(src = "{sndIP}", chksum = 0xff) / UDP(dport = 2152, chksum = 0xff) / GTP_U_Header(gtp_type=255, teid=0x123456)', + "IPv6/UDP/GTPU": f'IPv6(src = "{sndIPv6}") / UDP(dport = 2152, chksum = 0xff) / GTP_U_Header(gtp_type=255, teid=0x123456)', + } + pkts_inner = { + "IP/UDP": f'IP(src = "{sndIP}", chksum = 0xff) / UDP(sport = 29999, dport = 30000, chksum = 0xff) / Raw("x" * 100)', + "IP/TCP": f'IP(src = "{sndIP}", chksum = 0xff) / TCP(sport = 29999, dport = 30000, chksum = 0xff) / Raw("x" * 100)', + "IP/SCTP": f'IP(src = "{sndIP}", chksum = 0xff) / SCTP(sport = 29999, dport = 30000, chksum = 0x0) / Raw("x" * 128)', + "IPv6/UDP": f'IPv6(src = "{sndIPv6}") / UDP(sport = 29999, dport = 30000, chksum = 0xff) / Raw("x" * 100)', + "IPv6/TCP": f'IPv6(src = "{sndIPv6}") / TCP(sport = 29999, dport = 30000, chksum = 0xff) / Raw("x" * 100)', + "IPv6/SCTP": f'IPv6(src = "{sndIPv6}") / SCTP(sport = 29999, dport = 30000, chksum = 0x0) / Raw("x" * 128)', + } + + if self.dcf_mode == "enable": + pkts_outer[ + "IP/UDP/VXLAN/ETH" + ] = f'IP(src = "{sndIP}") / UDP(sport = 4789, dport = 4789, chksum = 0xff) / VXLAN() / Ether()' + pkts_outer[ + "IPv6/UDP/VXLAN/ETH" + ] = f'IPv6(src = "{sndIPv6}") / UDP(sport = 4789, dport = 4789, chksum = 0xff) / VXLAN() / Ether()' + + pkts = { + key_outer + + "/" + + key_inner: f'Ether(dst="{mac}", src="52:00:00:00:00:00") / ' + + p_outer + + " / " + + p_inner + for key_outer, p_outer in pkts_outer.items() + for key_inner, p_inner in pkts_inner.items() + } + + pkts_outer_ref = { + "IP/UDP/VXLAN-GPE": f'IP(src = "{expIP}") / UDP(sport = 4790, dport = 4790) / VXLAN()', + "IP/UDP/VXLAN-GPE/ETH": f'IP(src = "{expIP}") / UDP(sport = 4790, dport = 4790) / VXLAN() / Ether()', + "IPv6/UDP/VXLAN-GPE": f'IPv6(src = "{expIPv6}") / UDP(sport = 4790, dport = 4790) / VXLAN()', + "IPv6/UDP/VXLAN-GPE/ETH": f'IPv6(src = "{expIPv6}") / UDP(sport = 4790, dport = 4790) / VXLAN() / Ether()', + "IP/GRE": f'IP(src = "{expIP}", proto = 47) / GRE()', + "IP/GRE/ETH": f'IP(src = "{expIP}", proto = 47) / GRE() / Ether()', + "IP/NVGRE/ETH": f'IP(src = "{expIP}", proto = 47) / GRE(key_present=1, proto=0x6558, key=0x00000100) / Ether()', + "IPv6/GRE": f'IPv6(src = "{expIPv6}", nh = 47) / GRE()', + "IPv6/GRE/ETH": f'IPv6(src = "{expIPv6}", nh = 47) / GRE() / Ether()', + "IPv6/NVGRE/ETH": f'IPv6(src = "{expIPv6}", nh = 47) / GRE(key_present=1, proto=0x6558, key=0x00000100) / Ether()', + "IP/UDP/GTPU": f'IP(src = "{expIP}") / UDP(dport = 2152) / GTP_U_Header(gtp_type=255, teid=0x123456)', + "IPv6/UDP/GTPU": f'IPv6(src = "{expIPv6}") / UDP(dport = 2152) / GTP_U_Header(gtp_type=255, teid=0x123456)', + } + pkts_inner_ref = { + "IP/UDP": f'IP(src = "{expIP}") / UDP(sport = 29999, dport = 30000) / Raw("x" * 100)', + "IP/TCP": f'IP(src = "{expIP}") / TCP(sport = 29999, dport = 30000) / Raw("x" * 100)', + "IP/SCTP": f'IP(src = "{expIP}") / SCTP(sport = 29999, dport = 30000) / Raw("x" * 128)', + "IPv6/UDP": f'IPv6(src = "{expIPv6}") / UDP(sport = 29999, dport = 30000) / Raw("x" * 100)', + "IPv6/TCP": f'IPv6(src = "{expIPv6}") / TCP(sport = 29999, dport = 30000) / Raw("x" * 100)', + "IPv6/SCTP": f'IPv6(src = "{expIPv6}") / SCTP(sport = 29999, dport = 30000) / Raw("x" * 128)', + } + + if self.dcf_mode == "enable": + pkts_outer_ref[ + "IP/UDP/VXLAN/ETH" + ] = f'IP(src = "{sndIP}") / UDP(sport = 4789, dport = 4789) / VXLAN() / Ether()' + pkts_outer_ref[ + "IPv6/UDP/VXLAN/ETH" + ] = f'IPv6(src = "{sndIPv6}") / UDP(sport = 4789, dport = 4789) / VXLAN() / Ether()' + + pkts_ref = { + key_outer + + "/" + + key_inner: f'Ether(dst="{mac}", src="52:00:00:00:00:00") / ' + + p_outer + + " / " + + p_inner + for key_outer, p_outer in pkts_outer_ref.items() + for key_inner, p_inner in pkts_inner_ref.items() + } + + self.checksum_enablehw_tunnel(0, self.vm_dut_0) + self.checksum_enablehw_tunnel(1, self.vm_dut_0) + + self.vm0_testpmd.execute_cmd("start") + self.vm0_testpmd.wait_link_status_up(0) + self.vm0_testpmd.wait_link_status_up(1) + self.checksum_validate_tunnel(pkts, pkts_ref) + # Validate checksum on the receive packet + out = self.vm0_testpmd.execute_cmd("stop") + bad_outer_ipcsum = self.vm0_testpmd.get_pmd_value("Bad-outer-ipcsum:", out) + bad_outer_l4csum = self.vm0_testpmd.get_pmd_value("Bad-outer-l4csum:", out) + bad_inner_ipcsum = self.vm0_testpmd.get_pmd_value("Bad-ipcsum:", out) + bad_inner_l4csum = self.vm0_testpmd.get_pmd_value("Bad-l4csum:", out) + self.verify(bad_outer_ipcsum == 42, "Bad-outer-ipcsum check error") + self.verify(bad_outer_l4csum == 66, "Bad-outer-l4csum check error") + self.verify(bad_inner_ipcsum == 42, "Bad-ipcsum check error") + self.verify(bad_inner_l4csum == 84, "Bad-l4csum check error") + def test_checksum_offload_disable(self): """ Enable SW checksum offload. From patchwork Thu Dec 22 09:37:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ke Xu X-Patchwork-Id: 121288 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 559A0A034C; Thu, 22 Dec 2022 10:38:59 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4B86842B8C; Thu, 22 Dec 2022 10:38:59 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 19C44400D7 for ; Thu, 22 Dec 2022 10:38:56 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1671701937; x=1703237937; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=GKB1XiTc6Vo5F7CnmFSGhqIgrhF9bg1iIuElw45yHk8=; b=RTBtWJWIGikjbJllUFDF9FsqGseno8i+CoHZnHwwQ8J59roRQhtqhwje X5bOMO7wcQ41HRNQy9yLgIAVrFZTRcDrbsFWFTeMARB1dyF+r2XW0ggnm h6EZhLED+PAOm04mtq6iYF9PBB2vpmdLMeG6pN7bEq2UroX6/fRLtk81w +C4c3q/DRN6E+7tHNcD+kjDti3mPWvbUPUGeW0W0K79U3QkJIT3+vv92o SgchS+BFIf+GyC2Ep9/qIrQ6vXWbNXQIAUqSREzb66yp+u+MpantwG6m5 ziBuaixf1Jk4YuCrO/C7tYMaj/Skb3XvBkP7jpiz1ngFDwo+58zFd5F7x g==; X-IronPort-AV: E=McAfee;i="6500,9779,10568"; a="299758327" X-IronPort-AV: E=Sophos;i="5.96,265,1665471600"; d="scan'208";a="299758327" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Dec 2022 01:38:56 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10568"; a="684130096" X-IronPort-AV: E=Sophos;i="5.96,265,1665471600"; d="scan'208";a="684130096" Received: from dpdk-xuke-lab.sh.intel.com ([10.67.119.8]) by orsmga001.jf.intel.com with ESMTP; 22 Dec 2022 01:38:54 -0800 From: Ke Xu To: dts@dpdk.org Cc: weiyuanx.li@intel.com, qi.fu@intel.com, lijuan.tu@intel.com, Ke Xu Subject: [DTS][PATCH V4 3/5] tests/vf_offload: add vf tso case for tunneling packets. Date: Thu, 22 Dec 2022 17:37:13 +0800 Message-Id: <20221222093715.116863-4-ke1.xu@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221222093715.116863-1-ke1.xu@intel.com> References: <20221222093715.116863-1-ke1.xu@intel.com> MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org In DPDK 22.11, tunneling tso is supported. This case supporting validation these packets. Signed-off-by: Weiyuan Li Signed-off-by: Ke Xu --- tests/TestSuite_vf_offload.py | 186 ++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) diff --git a/tests/TestSuite_vf_offload.py b/tests/TestSuite_vf_offload.py index a6d61e47..8d7440a5 100644 --- a/tests/TestSuite_vf_offload.py +++ b/tests/TestSuite_vf_offload.py @@ -216,6 +216,32 @@ class TestVfOffload(TestCase): dut.send_expect("csum set sctp sw %d" % port, "testpmd>") dut.send_expect("port start all", "testpmd>") + def tso_enable(self, port, dut): + dut.send_expect("port stop %d" % port, "testpmd>") + dut.send_expect("csum set ip hw %d" % port, "testpmd>") + dut.send_expect("csum set udp hw %d" % port, "testpmd>") + dut.send_expect("csum set tcp hw %d" % port, "testpmd>") + dut.send_expect("csum set sctp hw %d" % port, "testpmd>") + dut.send_expect("csum set outer-ip hw %d" % port, "testpmd>") + dut.send_expect("csum set outer-udp hw %d" % port, "testpmd>") + dut.send_expect("csum parse-tunnel on %d" % port, "testpmd>") + dut.send_expect("tso set 800 %d" % port, "testpmd>") + dut.send_expect("port start %d" % port, "testpmd>") + + def tso_enable_tunnel(self, port, dut): + dut.send_expect("port stop %d" % port, "testpmd>") + dut.send_expect("csum set ip hw %d" % port, "testpmd>") + dut.send_expect("csum set udp hw %d" % port, "testpmd>") + dut.send_expect("csum set tcp hw %d" % port, "testpmd>") + dut.send_expect("csum set sctp hw %d" % port, "testpmd>") + dut.send_expect("csum set outer-ip hw %d" % port, "testpmd>") + dut.send_expect("csum set outer-udp hw %d" % port, "testpmd>") + dut.send_expect("csum parse-tunnel on %d" % port, "testpmd>") + dut.send_expect("rx_vxlan_port add 4789 %d" % port, "testpmd>") + dut.send_expect("tso set 800 %d" % port, "testpmd>") + dut.send_expect("tunnel_tso set 800 %d" % port, "testpmd>") + dut.send_expect("port start %d" % port, "testpmd>") + def checksum_validate(self, packets_sent, packets_expected): """ Validate the checksum. @@ -849,6 +875,166 @@ class TestVfOffload(TestCase): "the packet segmentation incorrect, %s" % tx_outlist, ) + @check_supported_nic( + ["ICE_100G-E810C_QSFP", "ICE_25G-E810C_SFP", "ICE_25G-E810_XXV_SFP"] + ) + @skip_unsupported_pkg(["os default"]) + def test_tso_tunnel(self): + """ + TSO tunneled IPv4 TCP, IPv6 TCP testing. + """ + tx_interface = self.tester.get_interface( + self.tester.get_local_port(self.vm0_dut_ports[0]) + ) + rx_interface = self.tester.get_interface( + self.tester.get_local_port(self.vm0_dut_ports[1]) + ) + + self.loading_sizes = [128, 800, 801, 1700, 2500] + + self.tester.send_expect( + "ethtool -K %s rx off tx off tso off gso off gro off lro off" + % tx_interface, + "# ", + ) + self.tester.send_expect("ip l set %s up" % tx_interface, "# ") + self.dut.send_expect( + "ifconfig %s mtu %s" % (self.dut.ports_info[0]["intf"], TSO_MTU), "# " + ) + self.dut.send_expect( + "ifconfig %s mtu %s" % (self.dut.ports_info[1]["intf"], TSO_MTU), "# " + ) + + self.portMask = utils.create_mask([self.vm0_dut_ports[0]]) + self.launch_testpmd( + dcf_flag=self.dcf_mode, + param="--portmask=0x3 " + + "--enable-rx-cksum " + + "--max-pkt-len=%s" % TSO_MTU, + ) + + mac = self.vm0_testpmd.get_port_mac(0) + self.vm0_testpmd.execute_cmd("set verbose 1", "testpmd> ", 120) + self.vm0_testpmd.execute_cmd("set fwd csum", "testpmd>", 120) + self.vm0_testpmd.execute_cmd("set promisc 0 on", "testpmd> ", 120) + self.vm0_testpmd.execute_cmd("set promisc 1 on", "testpmd> ", 120) + self.vm0_testpmd.execute_cmd("csum mac-swap off 0", "testpmd>") + self.vm0_testpmd.execute_cmd("csum mac-swap off 1", "testpmd>") + self.tso_enable_tunnel(self.vm0_dut_ports[0], self.vm_dut_0) + self.tso_enable_tunnel(self.vm0_dut_ports[1], self.vm_dut_0) + self.vm0_testpmd.execute_cmd("start") + self.vm0_testpmd.wait_link_status_up(self.vm0_dut_ports[0]) + self.vm0_testpmd.wait_link_status_up(self.vm0_dut_ports[1]) + + pkts_outer = { + "IP/UDP/VXLAN/ETH": 'IP(src = "192.168.1.1", dst = "192.168.1.2") / UDP(sport = 4789, dport = 4789) / VXLAN() / Ether()', + "IP/UDP/VXLAN-GPE": 'IP(src = "192.168.1.1", dst = "192.168.1.2") / UDP(sport = 4790, dport = 4790) / VXLAN()', + "IP/UDP/VXLAN-GPE/ETH": 'IP(src = "192.168.1.1", dst = "192.168.1.2") / UDP(sport = 4790, dport = 4790) / VXLAN() / Ether()', + "IPv6/UDP/VXLAN/ETH": 'IPv6(src = "FE80:0:0:0:200:1FF:FE00:200", dst = "3555:5555:6666:6666:7777:7777:8888:8888") / UDP(sport = 4789, dport = 4789) / VXLAN() / Ether()', + "IPv6/UDP/VXLAN-GPE": 'IPv6(src = "FE80:0:0:0:200:1FF:FE00:200", dst = "3555:5555:6666:6666:7777:7777:8888:8888") / UDP(sport = 4790, dport = 4790) / VXLAN()', + "IPv6/UDP/VXLAN-GPE/ETH": 'IPv6(src = "FE80:0:0:0:200:1FF:FE00:200", dst = "3555:5555:6666:6666:7777:7777:8888:8888") / UDP(sport = 4790, dport = 4790) / VXLAN() / Ether()', + "IP/GRE": 'IP(src = "192.168.1.1", dst = "192.168.1.2", proto = 47) / GRE()', + "IP/GRE/ETH": 'IP(src = "192.168.1.1", dst = "192.168.1.2", proto = 47) / GRE() / Ether()', + "IP/NVGRE/ETH": 'IP(src = "192.168.1.1", dst = "192.168.1.2", proto = 47) / GRE(key_present=1, proto=0x6558, key=0x00000100) / Ether()', + "IPv6/GRE": 'IPv6(src = "FE80:0:0:0:200:1FF:FE00:200", dst = "3555:5555:6666:6666:7777:7777:8888:8888", nh = 47) / GRE()', + "IPv6/GRE/ETH": 'IPv6(src = "FE80:0:0:0:200:1FF:FE00:200", dst = "3555:5555:6666:6666:7777:7777:8888:8888", nh = 47) / GRE() / Ether()', + "IPv6/NVGRE/ETH": 'IPv6(src = "FE80:0:0:0:200:1FF:FE00:200", dst = "3555:5555:6666:6666:7777:7777:8888:8888", nh = 47) / GRE(key_present=1, proto=0x6558, key=0x00000100) / Ether()', + "IP/UDP/GTPU": 'IP(src = "192.168.1.1", dst = "192.168.1.2") / UDP(dport = 2152) / GTP_U_Header(gtp_type=255, teid=0x123456)', + "IPv6/UDP/GTPU": 'IPv6(src = "FE80:0:0:0:200:1FF:FE00:200", dst = "3555:5555:6666:6666:7777:7777:8888:8888") / UDP(dport = 2152) / GTP_U_Header(gtp_type=255, teid=0x123456)', + } + + self.tester.scapy_foreground() + time.sleep(5) + + for key_outer in pkts_outer: + for loading_size in self.loading_sizes: + # IPv4 tcp test + out = self.vm0_testpmd.execute_cmd( + "clear port info all", "testpmd> ", 120 + ) + self.tcpdump_start_sniffing([tx_interface, rx_interface]) + if "GTPU" in key_outer: + self.tester.scapy_append( + "from scapy.contrib.gtp import GTP_U_Header" + ) + self.tester.scapy_append( + ( + 'sendp([Ether(dst="%s",src="52:00:00:00:00:00")/' + + pkts_outer[key_outer] + + '/IP(src="192.168.1.1",dst="192.168.1.2")/TCP(sport=1021,dport=1021)/("X"*%s)], iface="%s")' + ) + % (mac, loading_size, tx_interface) + ) + out = self.tester.scapy_execute() + out = self.vm0_testpmd.execute_cmd("show port stats all") + print(out) + self.tcpdump_stop_sniff() + rx_stats = self.number_of_packets(rx_interface) + tx_stats = self.number_of_packets(tx_interface) + tx_outlist = self.number_of_bytes(rx_interface) + self.logger.info(tx_outlist) + if loading_size <= 800: + self.verify( + rx_stats == tx_stats and int(tx_outlist[0]) == loading_size, + f"{key_outer} tunnel IPV4 RX or TX packet number not correct", + ) + else: + num = loading_size // 800 + for i in range(num): + self.verify( + int(tx_outlist[i]) == 800, + "the packet segmentation incorrect, %s" % tx_outlist, + ) + if loading_size % 800 != 0: + self.verify( + int(tx_outlist[num]) == loading_size % 800, + "the packet segmentation incorrect, %s" % tx_outlist, + ) + + for loading_size in self.loading_sizes: + # IPv6 tcp test + out = self.vm0_testpmd.execute_cmd( + "clear port info all", "testpmd> ", 120 + ) + self.tcpdump_start_sniffing([tx_interface, rx_interface]) + if "GTPU" in key_outer: + self.tester.scapy_append( + "from scapy.contrib.gtp import GTP_U_Header" + ) + self.tester.scapy_append( + ( + 'sendp([Ether(dst="%s", src="52:00:00:00:00:00")/' + + pkts_outer[key_outer] + + '/IPv6(src="FE80:0:0:0:200:1FF:FE00:200", dst="3555:5555:6666:6666:7777:7777:8888:8888")/TCP(sport=1021,dport=1021)/("X"*%s)], iface="%s")' + ) + % (mac, loading_size, tx_interface) + ) + out = self.tester.scapy_execute() + out = self.vm0_testpmd.execute_cmd("show port stats all") + print(out) + self.tcpdump_stop_sniff() + rx_stats = self.number_of_packets(rx_interface) + tx_stats = self.number_of_packets(tx_interface) + tx_outlist = self.number_of_bytes(rx_interface) + self.logger.info(tx_outlist) + if loading_size <= 800: + self.verify( + rx_stats == tx_stats and int(tx_outlist[0]) == loading_size, + f"{key_outer} tunnel IPV6 RX or TX packet number not correct", + ) + else: + num = loading_size // 800 + for i in range(num): + self.verify( + int(tx_outlist[i]) == 800, + "the packet segmentation incorrect, %s" % tx_outlist, + ) + if loading_size % 800 != 0: + self.verify( + int(tx_outlist[num]) == loading_size % 800, + "the packet segmentation incorrect, %s" % tx_outlist, + ) + def tear_down(self): self.vm0_testpmd.execute_cmd("quit", "# ") self.dut.send_expect( From patchwork Thu Dec 22 09:37:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ke Xu X-Patchwork-Id: 121289 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7AED0A034C; Thu, 22 Dec 2022 10:39:01 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7624C42D14; Thu, 22 Dec 2022 10:39:01 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 24ED9400D7 for ; Thu, 22 Dec 2022 10:38:58 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1671701939; x=1703237939; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=IMY8JJiHwbS4Iq3Qwt5KtH2Cv3GluDxdZOnG7ieey84=; b=LfYLg6xqHkkgXqAO6AQcjnBR0ftgG0AO61uERSLvjPqu+uMjtkuBndok 0U9Pl0PN9EP9JVJW5tZbLmoOkhsGIhbtoS79IvrA2EGezrw3mo7lgmpSI i4qYHS+qhmhN9UbQSazGsBzaQrQqFZDT+dKieDGYdPcRGUDJnf9xe6rY2 iaKbnsgjs3aATEq968K+N3vZj8rCQWY+1G20lswz4EI05+t2zOHpFSInd RKnpm8EL2Ll5zkMzdfM81G/Ukayg9ey0SmKhnw9W5Fblt4hszeAI58pCm H1t517XdHiuIUQHaq+hp+qxj5oJ2+EtBNFyi6jM0Cj4orvmwPc4aki5lA g==; X-IronPort-AV: E=McAfee;i="6500,9779,10568"; a="299758332" X-IronPort-AV: E=Sophos;i="5.96,265,1665471600"; d="scan'208";a="299758332" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Dec 2022 01:38:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10568"; a="684130101" X-IronPort-AV: E=Sophos;i="5.96,265,1665471600"; d="scan'208";a="684130101" Received: from dpdk-xuke-lab.sh.intel.com ([10.67.119.8]) by orsmga001.jf.intel.com with ESMTP; 22 Dec 2022 01:38:56 -0800 From: Ke Xu To: dts@dpdk.org Cc: weiyuanx.li@intel.com, qi.fu@intel.com, lijuan.tu@intel.com, Ke Xu Subject: [DTS][PATCH V4 4/5] tests/vf_offload: dts adaptation DPDK checksum function changes Date: Thu, 22 Dec 2022 17:37:14 +0800 Message-Id: <20221222093715.116863-5-ke1.xu@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221222093715.116863-1-ke1.xu@intel.com> References: <20221222093715.116863-1-ke1.xu@intel.com> MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org DPDK22.11 236bc417e2da(app/testpmd: fix MAC header in checksum forward engine) changes the checksum functions adds switches to control whether to exchange MAC address. Modify DTS code to adapt to this change. Signed-off-by: Weiyuan Li Signed-off-by: Ke Xu --- tests/TestSuite_vf_offload.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/TestSuite_vf_offload.py b/tests/TestSuite_vf_offload.py index 8d7440a5..3d89729d 100644 --- a/tests/TestSuite_vf_offload.py +++ b/tests/TestSuite_vf_offload.py @@ -352,6 +352,8 @@ class TestVfOffload(TestCase): param="--portmask=%s " % (self.portMask) + "--enable-rx-cksum " + "", ) self.vm0_testpmd.execute_cmd("set fwd csum") + self.vm0_testpmd.execute_cmd("csum mac-swap off 0", "testpmd>") + self.vm0_testpmd.execute_cmd("csum mac-swap off 1", "testpmd>") self.vm0_testpmd.execute_cmd("set promisc 1 on") self.vm0_testpmd.execute_cmd("set promisc 0 on") @@ -612,6 +614,8 @@ class TestVfOffload(TestCase): param="--portmask=%s " % (self.portMask) + "--enable-rx-cksum " + "", ) self.vm0_testpmd.execute_cmd("set fwd csum") + self.vm0_testpmd.execute_cmd("csum mac-swap off 0", "testpmd>") + self.vm0_testpmd.execute_cmd("csum mac-swap off 1", "testpmd>") self.vm0_testpmd.execute_cmd("set promisc 1 on") self.vm0_testpmd.execute_cmd("set promisc 0 on") From patchwork Thu Dec 22 09:37:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ke Xu X-Patchwork-Id: 121290 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AAC81A04FD; Thu, 22 Dec 2022 10:39:01 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 927F642D17; Thu, 22 Dec 2022 10:39:01 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id ADD0D400D7 for ; Thu, 22 Dec 2022 10:39:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1671701940; x=1703237940; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2DqAhc9qM416mDMeeXmdR5erlATuWYcw5HBmBzjWWzI=; b=SWlaRGyXYBLPfwS4RRy0eS0EYoeMCi0ZhuqtsW7+HqQ7Zwz7cr3HMwNt TTckjLVR/KjG+Ykjm4VkARP8B4Ja8FrdPfZzBXzfgdqRarl3oKYrNt2hd UZ6Ud+YG+8K7p4mSR1+a2G1CX2cmd+9li8WQRyGvMfeFho4UsAhbs6tH5 uu40g0nwjVV1L5XJaoYKaccRLxdwrfMafql617H1T/d0N8/SzU19+p0CU IWn9aA8Q1HQQRDFCdA1llXc1eVgpeVywm+JlO43ls+JDnzM7sUZDERZBf kKHK60XoE9Ijh6attfcj6sVF61AxM++n3ENeFldN5W4Ogf0rp6KejJSM+ g==; X-IronPort-AV: E=McAfee;i="6500,9779,10568"; a="299758335" X-IronPort-AV: E=Sophos;i="5.96,265,1665471600"; d="scan'208";a="299758335" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Dec 2022 01:39:00 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10568"; a="684130112" X-IronPort-AV: E=Sophos;i="5.96,265,1665471600"; d="scan'208";a="684130112" Received: from dpdk-xuke-lab.sh.intel.com ([10.67.119.8]) by orsmga001.jf.intel.com with ESMTP; 22 Dec 2022 01:38:58 -0800 From: Ke Xu To: dts@dpdk.org Cc: weiyuanx.li@intel.com, qi.fu@intel.com, lijuan.tu@intel.com, Ke Xu Subject: [DTS][PATCH V4 5/5] tests/vf_offload: add new method to anayse tunnel packets. Date: Thu, 22 Dec 2022 17:37:15 +0800 Message-Id: <20221222093715.116863-6-ke1.xu@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221222093715.116863-1-ke1.xu@intel.com> References: <20221222093715.116863-1-ke1.xu@intel.com> MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org As tcpdump not supporting some of the packet organizations we are to cover, a newly implemented function is introduced to replace number_of_packets and number_of_bytes in tunnel cases. Signed-off-by: Ke Xu --- tests/TestSuite_vf_offload.py | 64 +++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/tests/TestSuite_vf_offload.py b/tests/TestSuite_vf_offload.py index 3d89729d..6765fcc5 100644 --- a/tests/TestSuite_vf_offload.py +++ b/tests/TestSuite_vf_offload.py @@ -6,8 +6,19 @@ import re import string import time +from scapy.contrib.lldp import LLDPDU, LLDPDUManagementAddress +from scapy.contrib.mpls import MPLS +from scapy.contrib.nsh import NSH +from scapy.layers.inet import ICMP, IP, TCP, UDP +from scapy.layers.inet6 import IPv6, IPv6ExtHdrFragment, IPv6ExtHdrRouting +from scapy.layers.l2 import ARP, GRE, Dot1Q, Ether +from scapy.layers.sctp import SCTP +from scapy.layers.vxlan import VXLAN +from scapy.packet import Raw + import framework.utils as utils from framework.crb import Crb +from framework.packet import Packet from framework.pmd_output import PmdOutput from framework.settings import DPDK_DCFMODE_SETTING, HEADER_SIZE, load_global_setting from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg @@ -687,6 +698,25 @@ class TestVfOffload(TestCase): self.tester.send_expect('echo "Cleaning buffer"', "#") time.sleep(1) + def tcpdump_analyse_sniff(self, iface): + """ + Analyse the tcpdump captured packets. Returning the number of + packets and the bytes of packets payload. + """ + packet = Packet() + pkts = packet.read_pcapfile("tcpdump_{0}.pcap".format(iface), self.tester) + pkts = [ + p + for p in pkts + if len(p.layers()) >= 3 + and p.layers()[1] in {IP, IPv6} + and p.layers()[2] in {IP, IPv6, UDP, TCP, SCTP, GRE, MPLS} + and Raw in p + ] + rx_packet_count = len(pkts) + rx_packet_size = [len(p[Raw]) for p in pkts] + return rx_packet_count, rx_packet_size + def tcpdump_command(self, command): """ Send a tcpdump related command and return an integer from the output. @@ -973,26 +1003,25 @@ class TestVfOffload(TestCase): out = self.vm0_testpmd.execute_cmd("show port stats all") print(out) self.tcpdump_stop_sniff() - rx_stats = self.number_of_packets(rx_interface) - tx_stats = self.number_of_packets(tx_interface) - tx_outlist = self.number_of_bytes(rx_interface) - self.logger.info(tx_outlist) + rx_stats, payload_size_list = self.tcpdump_analyse_sniff(rx_interface) + tx_stats, _ = self.tcpdump_analyse_sniff(tx_interface) + self.logger.info(payload_size_list) if loading_size <= 800: self.verify( - rx_stats == tx_stats and int(tx_outlist[0]) == loading_size, + rx_stats == tx_stats and payload_size_list[0] == loading_size, f"{key_outer} tunnel IPV4 RX or TX packet number not correct", ) else: num = loading_size // 800 for i in range(num): self.verify( - int(tx_outlist[i]) == 800, - "the packet segmentation incorrect, %s" % tx_outlist, + payload_size_list[i] == 800, + "the packet segmentation incorrect, %s" % payload_size_list, ) if loading_size % 800 != 0: self.verify( - int(tx_outlist[num]) == loading_size % 800, - "the packet segmentation incorrect, %s" % tx_outlist, + payload_size_list[num] == loading_size % 800, + "the packet segmentation incorrect, %s" % payload_size_list, ) for loading_size in self.loading_sizes: @@ -1017,26 +1046,25 @@ class TestVfOffload(TestCase): out = self.vm0_testpmd.execute_cmd("show port stats all") print(out) self.tcpdump_stop_sniff() - rx_stats = self.number_of_packets(rx_interface) - tx_stats = self.number_of_packets(tx_interface) - tx_outlist = self.number_of_bytes(rx_interface) - self.logger.info(tx_outlist) + rx_stats, payload_size_list = self.tcpdump_analyse_sniff(rx_interface) + tx_stats, _ = self.tcpdump_analyse_sniff(tx_interface) + self.logger.info(payload_size_list) if loading_size <= 800: self.verify( - rx_stats == tx_stats and int(tx_outlist[0]) == loading_size, + rx_stats == tx_stats and payload_size_list[0] == loading_size, f"{key_outer} tunnel IPV6 RX or TX packet number not correct", ) else: num = loading_size // 800 for i in range(num): self.verify( - int(tx_outlist[i]) == 800, - "the packet segmentation incorrect, %s" % tx_outlist, + payload_size_list[i] == 800, + "the packet segmentation incorrect, %s" % payload_size_list, ) if loading_size % 800 != 0: self.verify( - int(tx_outlist[num]) == loading_size % 800, - "the packet segmentation incorrect, %s" % tx_outlist, + payload_size_list[num] == loading_size % 800, + "the packet segmentation incorrect, %s" % payload_size_list, ) def tear_down(self):