From patchwork Thu Sep 8 11:43:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Jiale, SongX" X-Patchwork-Id: 116067 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 90856A0548; Thu, 8 Sep 2022 05:29:32 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6037B4021F; Thu, 8 Sep 2022 05:29:32 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 666F3400D6 for ; Thu, 8 Sep 2022 05:29:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662607771; x=1694143771; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=xFbN/9gmBuwakeOC+OkqmrLzVuN2M1ej2m6bT7Ec6iE=; b=UZ3Rp8eDWPt9FUtuvnO8h+mcEASAE45VjPWOM6BgoLK7AkPHK4hhxgPU QZscmpa/9YW8SvTyPoDhWaA414z7lnTnxowsER99qsNyqKPLZpMOKNJE0 5t/H4fuSevzoG+aFRBUsFhFnIpBxynjDCzUW/GspCnBi7KGyIPb22FWUX V4Jqwg+nE43J/MecCjYqihAQ0l2Mw6RivLJXBgfN4AMHLwIVkhgY76wvd ciQrwTHb+iprLC7BNE72iStJfLLJ/NrIFFn3bDWZ/7LT6NspTb/t92f9f fBkP4IUrMmHEsSZ8CLQJmZuaRCz1wgwamozUhiZJteX22l1ZzQax3Hy7Q Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10463"; a="294638541" X-IronPort-AV: E=Sophos;i="5.93,298,1654585200"; d="scan'208";a="294638541" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Sep 2022 20:29:30 -0700 X-IronPort-AV: E=Sophos;i="5.93,298,1654585200"; d="scan'208";a="676489594" Received: from unknown (HELO cvl_tetser_105.icx.intel.com) ([10.239.252.94]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Sep 2022 20:29:29 -0700 From: Song Jiale To: dts@dpdk.org Cc: Song Jiale Subject: [dts] [PATCH V2 1/2] test_plans/ip_pipeline: redesign the cases to test rss pipline Date: Thu, 8 Sep 2022 11:43:57 +0000 Message-Id: <20220908114358.8447-1-songx.jiale@intel.com> X-Mailer: git-send-email 2.17.1 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 the case of rss pipline only support i40e, redesign the cases to support ice. Signed-off-by: Song Jiale Acked-by: Peng, Yuan --- test_plans/ip_pipeline_test_plan.rst | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/test_plans/ip_pipeline_test_plan.rst b/test_plans/ip_pipeline_test_plan.rst index c504efa4..395b1bc5 100644 --- a/test_plans/ip_pipeline_test_plan.rst +++ b/test_plans/ip_pipeline_test_plan.rst @@ -171,17 +171,14 @@ Test Case: RSS pipeline .//examples/dpdk-ip_pipeline -c 0x1f -n 4 –- -s examples/rss.cli -3. Send following packets with one test port:: +3. Send 20 IP packets randomly for one test port - packet_1:Ether(dst="00:11:22:33:44:55")/IP(src="100.0.10.1",dst="100.0.20.2")/Raw(load="X"*6) - packet_2:Ether(dst="00:11:22:33:44:55")/IP(src="100.0.0.0",dst="100.0.0.1")/Raw(load="X"*6) - packet_3:Ether(dst="00:11:22:33:44:55")/IP(src="100.0.10.1",dst="100.0.0.2")/Raw(load="X"*6) - packet_4:Ether(dst="00:11:22:33:44:55")/IP(src="100.0.0.1",dst="100.0.10.2")/Raw(load="X"*6) +4. Check the test port can be received and assigned to other ports through RSS + Verify that the sum of packets received by all ports is 20. + Verify all tester_port can received packets. - Verify packet_1 was received by tester_port_0. - Verify packet_2 was received by tester_port_1. - Verify packet_3 was received by tester_port_2. - Verify packet_4 was received by tester_port_3. +5. Repeat steps 3-4 to ensure that the RSS functions of all test ports are normal. + Verify that packets of the same IP can be assigned to the same port through different test ports. Test Case: vf l2fwd pipeline(pf bound to dpdk driver) ====================================================== From patchwork Thu Sep 8 11:43:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jiale, SongX" X-Patchwork-Id: 116068 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 85CFEA0548; Thu, 8 Sep 2022 05:29:35 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7FDBB40143; Thu, 8 Sep 2022 05:29:35 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 23BCF400D6 for ; Thu, 8 Sep 2022 05:29:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662607772; x=1694143772; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=HOI/aY0A9wXnDK19djSE0vtQRU8lyc2+2yPkM11rYP4=; b=cW0hHjLc58w9FO0rtPkvTGzmXvacksVlICQINBbTz891n1OgPcb79zrk xLrhc1n6vKRnUK036dHmWkLE1jAEdDn2n2tyS1azYLklOA15ABtr9E04v lx2A6f1/k7dnS0oR8XUvVjGAVnXzShvzmjrXKSwKDpgxm39oRDH3eqyM+ s9cZXkYQcNauh5T5lui4v9hrN+0ndbAaF3bpzXRHBw1Y8ntvQZaeNZ1j7 N71xNWbQCg2k8w6NH2ZmuiVGFGRKoHfE4VwrlLRV+LNe75MDCWUEnnEjX NeSZ6qnkgDd6ForUXl209Y+8b7eKAbz/Zvqjr19corfdLtiyMKDyFMlMs A==; X-IronPort-AV: E=McAfee;i="6500,9779,10463"; a="294638548" X-IronPort-AV: E=Sophos;i="5.93,298,1654585200"; d="scan'208";a="294638548" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Sep 2022 20:29:31 -0700 X-IronPort-AV: E=Sophos;i="5.93,298,1654585200"; d="scan'208";a="676489602" Received: from unknown (HELO cvl_tetser_105.icx.intel.com) ([10.239.252.94]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Sep 2022 20:29:30 -0700 From: Song Jiale To: dts@dpdk.org Cc: Song Jiale Subject: [dts] [PATCH V2 2/2] tests/ip_pipeline: redesign the cases to test rss pipline Date: Thu, 8 Sep 2022 11:43:58 +0000 Message-Id: <20220908114358.8447-2-songx.jiale@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220908114358.8447-1-songx.jiale@intel.com> References: <20220908114358.8447-1-songx.jiale@intel.com> 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 1. synchronously modify test case. 2. delete unused import. Signed-off-by: Song Jiale Acked-by: Peng, Yuan Tested-by: Lingli Chen Acked-by: Lijuan Tu --- tests/TestSuite_ip_pipeline.py | 161 +++++++++++++++++---------------- 1 file changed, 83 insertions(+), 78 deletions(-) diff --git a/tests/TestSuite_ip_pipeline.py b/tests/TestSuite_ip_pipeline.py index be9c05b9..80a7dbc8 100644 --- a/tests/TestSuite_ip_pipeline.py +++ b/tests/TestSuite_ip_pipeline.py @@ -2,34 +2,18 @@ # Copyright(c) 2010-2018 Intel Corporation # -import os -import random import re import time from time import sleep -import scapy.layers.inet -from scapy.arch import get_if_hwaddr from scapy.layers.inet import ICMP, IP, TCP, UDP, Ether -from scapy.layers.l2 import ARP, GRE, Dot1Q -from scapy.layers.sctp import SCTP, SCTPChunkData from scapy.packet import Raw, bind_layers from scapy.route import * -from scapy.sendrecv import sendp, sniff - -# from scapy.all import conf from scapy.utils import hexstr, rdpcap, wrpcap -import framework.utils as utils -from framework.crb import Crb -from framework.dut import Dut from framework.exception import VerifyFailure from framework.packet import Packet -from framework.pmd_output import PmdOutput -from framework.project_dpdk import DPDKdut -from framework.settings import DRIVERS, HEADER_SIZE from framework.test_case import TestCase -from framework.virt_dut import VirtDut class TestIPPipeline(TestCase): @@ -105,6 +89,9 @@ class TestIPPipeline(TestCase): # check that the link status of the port sending the packet is up self.tester.is_interface_up(tx_interface) + self.verify( + self.tester.is_interface_up(tx_interface), "port link status is down" + ) # Prepare the pkts to be sent self.tester.scapy_foreground() self.tester.scapy_append('pkt = rdpcap("%s")' % (pcap_file)) @@ -970,76 +957,94 @@ class TestIPPipeline(TestCase): ) self.dut.send_expect(cmd, "PIPELINE3 enable", 60) - # rule 0 test - pcap_file = "/tmp/rss_0.pcap" - pkt = [ - Ether(dst=self.dut_p0_mac) - / IP(src="100.0.10.1", dst="100.0.20.2") - / Raw(load="X" * 6) - ] - self.write_pcap_file(pcap_file, pkt) - filters = "dst host 100.0.20.2" - sniff_pkts = self.send_and_sniff_pkts(0, 0, pcap_file, filters) - dst_ip_list = [] - for packet in sniff_pkts: - dst_ip_list.append(packet.getlayer(1).dst) - self.verify("100.0.20.2" in dst_ip_list, "rule 0 test fail") - - # rule 1 test - pcap_file = "/tmp/rss_1.pcap" - pkt = [ - Ether(dst=self.dut_p0_mac) - / IP(src="100.0.0.0", dst="100.0.0.1") - / Raw(load="X" * 6) - ] - self.write_pcap_file(pcap_file, pkt) - filters = "dst host 100.0.0.1" - sniff_pkts = self.send_and_sniff_pkts(0, 1, pcap_file, filters) - dst_ip_list = [] - for packet in sniff_pkts: - dst_ip_list.append(packet.getlayer(1).dst) - self.verify("100.0.0.1" in dst_ip_list, "rule 1 test fail") - - # rule 2 test - pcap_file = "/tmp/rss_2.pcap" - pkt = [ - Ether(dst=self.dut_p0_mac) - / IP(src="100.0.10.1", dst="100.0.0.2") - / Raw(load="X" * 6) - ] - self.write_pcap_file(pcap_file, pkt) - filters = "dst host 100.0.0.2" - sniff_pkts = self.send_and_sniff_pkts(0, 2, pcap_file, filters) - dst_ip_list = [] - for packet in sniff_pkts: - dst_ip_list.append(packet.getlayer(1).dst) - self.verify("100.0.0.2" in dst_ip_list, "rule 2 test fail") - - # rule 3 test - pcap_file = "/tmp/rss_3.pcap" - pkt = [ - Ether(dst=self.dut_p0_mac) - / IP(src="100.0.0.1", dst="100.0.10.2") - / Raw(load="X" * 6) - ] - self.write_pcap_file(pcap_file, pkt) - filters = "dst host 100.0.10.2" - sniff_pkts = self.send_and_sniff_pkts(0, 3, pcap_file, filters) - dst_ip_list = [] - for packet in sniff_pkts: - dst_ip_list.append(packet.getlayer(1).dst) - self.verify("100.0.10.2" in dst_ip_list, "rule 3 test fail") + pkt = Packet() + tx_pkt_num = 20 + pkt.generate_random_pkts( + dstmac="00:11:22:33:44:55", + pktnum=tx_pkt_num, + random_type=["IP_RAW"], + options={"ip": {"dst": "100.0.20.2"}, "layers_config": []}, + ) - sleep(1) - cmd = "^C" - self.dut.send_expect(cmd, "# ", 20) + all_rx_num = [] + all_rx_packet = [] + for num in range(len(self.dut_ports)): + inst_list = [] + for port in self.dut_ports: + rx_interface = self.tester.get_interface(port) + filters = [ + {"layer": "ether", "config": {"dst": "not ff:ff:ff:ff:ff:ff"}} + ] + inst = self.tester.tcpdump_sniff_packets( + intf=rx_interface, filters=filters + ) + inst_list.append(inst) + rx_port = self.tester.get_local_port(self.dut_ports[num]) + tport_iface = self.tester.get_interface(rx_port) + self.verify( + self.tester.is_interface_up(tport_iface), "port link status is down" + ) + pkt.send_pkt(crb=self.tester, tx_port=tport_iface, count=1) + t_rx_ports = [] + t_rx_num = [] + t_rx_packets = [] + t_no_rx_ports = [] + rx_pkt_num = 0 + for port in self.dut_ports: + p = self.tester.load_tcpdump_sniff_packets(inst_list[port]) + if len(p): + t_rx_ports.append(port) + t_rx_num.append(len(p)) + t_rx_packets.append(p) + rx_pkt_num += len(p) + else: + t_no_rx_ports.append(port) + # Verify that the sum of packets received by all ports is 20 + self.verify( + rx_pkt_num == tx_pkt_num, + "send packet %s, but receive packet %s" % (tx_pkt_num, rx_pkt_num), + ) + # Verify all tester_port can received packets + self.verify( + len(t_rx_ports) == len(self.dut_ports), + "port %s not received packets" % t_no_rx_ports, + ) + all_rx_num.append(tuple(t_rx_num)) + all_rx_packet.append(t_rx_packets) + # Verify that packets of the same IP can be assigned to the same port through different test ports. + self.verify( + len(set(all_rx_num)), + "pipeline rss failed, all receiced packet num: %s" % all_rx_num, + ) + for d_port in self.dut_ports: + if d_port > 0: + for t_port in range(len(all_rx_packet[d_port])): + for i in range(len(all_rx_packet[d_port][t_port])): + try: + self.verify( + all_rx_packet[d_port][t_port][i] + in all_rx_packet[0][t_port], + "test port %s rss different with test port 0" % d_port, + ) + except VerifyFailure as ex: + self.logger.error( + "\n%s\n\n%s" + % ( + all_rx_packet[0][t_port][0].command(), + all_rx_packet[d_port][t_port][0].command(), + ) + ) + raise ex def tear_down(self): """ Run after each test case. """ + # kill all tcpdump + self.tcpdump_stop_sniff() # close app self.dut.send_expect("^C", "# ") + self.dut.kill_all() def tear_down_all(self): """