From patchwork Mon Aug 3 07:14:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, BoX C" X-Patchwork-Id: 75130 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2DF88A0518; Mon, 3 Aug 2020 09:21:13 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CC4792BE1; Mon, 3 Aug 2020 09:21:12 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 4BD482BD8 for ; Mon, 3 Aug 2020 09:21:10 +0200 (CEST) IronPort-SDR: gnA3LtBqzcV5dVW8wxgSEkWcgXXSqVjF3sjASONZZFxzZhsKtt1IdAPf5IvNbryj1csQOIn2/I 6ImgKAJ965aQ== X-IronPort-AV: E=McAfee;i="6000,8403,9701"; a="152027075" X-IronPort-AV: E=Sophos;i="5.75,429,1589266800"; d="scan'208";a="152027075" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Aug 2020 00:21:09 -0700 IronPort-SDR: qqCCuBvAhc/f15x69yHC9e3J9auqFOgFy1c1YrHMQ0kSKIq0dwlvijRHMnbj0F1Lud4M0kcnO8 myQpUNfN0MxQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,429,1589266800"; d="scan'208";a="395968273" Received: from unknown (HELO cb-dts.sh.intel.com) ([10.240.183.58]) by fmsmga001.fm.intel.com with ESMTP; 03 Aug 2020 00:21:07 -0700 From: ChenBo To: dts@dpdk.org Cc: ChenBo Date: Mon, 3 Aug 2020 15:14:13 +0800 Message-Id: <20200803071413.1029-1-box.c.chen@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [dts] [PATCH V1] tests/cvl_fdir: add new case for test l2 ethertype X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 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 Sender: "dts" add PF l2 ethertype test case. Signed-off-by: ChenBo --- tests/TestSuite_cvl_fdir.py | 208 ++++++++++++++++++++++++++++++++++-- 1 file changed, 202 insertions(+), 6 deletions(-) diff --git a/tests/TestSuite_cvl_fdir.py b/tests/TestSuite_cvl_fdir.py index b821961..cf7a8d8 100644 --- a/tests/TestSuite_cvl_fdir.py +++ b/tests/TestSuite_cvl_fdir.py @@ -284,6 +284,18 @@ MAC_IPV4_GTPU = { 'Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/IP()/Raw("x"*20)'] } +L2_Ethertype = [ + 'Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/Raw("x" *80)', + 'Ether(dst="00:11:22:33:44:55", type=0x8863)/IP()/Raw("x" * 80)', + 'Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP(proto=0x0021)/IP()/Raw("x" * 80)', + 'Ether(dst="00:11:22:33:44:55", type=0x8864)/IP()/Raw("x" * 80)', + 'Ether(dst="00:11:22:33:44:55")/ARP(pdst="192.168.1.1")', + 'Ether(dst="00:11:22:33:44:55", type=0x0806)/Raw("x" *80)', + 'Ether(dst="00:11:22:33:44:55",type=0x8100)', + 'Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=1)', + 'Ether(dst="00:11:22:33:44:55",type=0x88f7)/"\\x00\\x02"', + 'Ether(dst="00:11:22:33:44:55",type=0x8847)'] + tv_mac_ipv4_pay_queue_index = { "name": "test_mac_ipv4_pay_queue_index", "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end", @@ -1241,6 +1253,144 @@ vectors_mac_ipv4_gtpu = [tv_mac_ipv4_gtpu_queue_index, tv_mac_ipv4_gtpu_queue_gr tv_mac_ipv4_gtpu_passthru, tv_mac_ipv4_gtpu_drop, tv_mac_ipv4_gtpu_mark_rss, tv_mac_ipv4_gtpu_mark] +tv_l2_ethertype_queue_index = { + "name": "test_l2_ethertype_queue_index", + "rule": [ + "flow create 0 ingress pattern eth type is 0x8863 / end actions queue index 1 / mark id 1 / end", + "flow create 0 ingress pattern eth type is 0x8864 / end actions queue index 2 / mark id 2 / end", + "flow create 0 ingress pattern eth type is 0x0806 / end actions queue index 3 / mark id 3 / end", + "flow create 0 ingress pattern eth type is 0x8100 / end actions queue index 4 / mark id 4 / end", + "flow create 0 ingress pattern eth type is 0x88f7 / end actions queue index 5 / mark id 5 / end"], + "scapy_str": L2_Ethertype, + "check_param": [ + {"port_id": 0, "queue": 1, "mark_id": 1}, + {"port_id": 0, "queue": 1, "mark_id": 1}, + {"port_id": 0, "queue": 2, "mark_id": 2}, + {"port_id": 0, "queue": 2, "mark_id": 2}, + {"port_id": 0, "queue": 3, "mark_id": 3}, + {"port_id": 0, "queue": 3, "mark_id": 3}, + {"port_id": 0, "queue": 4, "mark_id": 4}, + {"port_id": 0, "queue": 4, "mark_id": 4}, + {"port_id": 0, "queue": 5, "mark_id": 5}, + {"port_id": 0, "queue": 0}] +} + +tv_l2_ethertype_queue_group = { + "name": "test_l2_ethertype_queue_group", + "rule": [ + "flow create 0 ingress pattern eth type is 0x8863 / end actions rss queues 0 1 end / mark id 0 / end", + "flow create 0 ingress pattern eth type is 0x8864 / end actions rss queues 2 3 end / mark id 1 / end", + "flow create 0 ingress pattern eth type is 0x0806 / end actions rss queues 4 5 end / mark id 2 / end", + "flow create 0 ingress pattern eth type is 0x8100 / end actions rss queues 6 7 end / mark id 2 / end", + "flow create 0 ingress pattern eth type is 0x88f7 / end actions rss queues 9 10 end / mark id 3 / end"], + "scapy_str": L2_Ethertype, + "check_param": [ + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 1}, + {"port_id": 0, "queue": 0, "mark_id": 1}, + {"port_id": 0, "queue": 0, "mark_id": 2}, + {"port_id": 0, "queue": 0, "mark_id": 2}, + {"port_id": 0, "queue": 0, "mark_id": 2}, + {"port_id": 0, "queue": 0, "mark_id": 2}, + {"port_id": 0, "queue": 0, "mark_id": 3}, + {"port_id": 0, "queue": 0}] +} + +tv_l2_ethertype_passthru = { + "name": "test_l2_ethertype_passthru", + "rule": [ + "flow create 0 ingress pattern eth type is 0x8863 / end actions passthru / mark / end", + "flow create 0 ingress pattern eth type is 0x8864 / end actions passthru / mark id 1 / end", + "flow create 0 ingress pattern eth type is 0x0806 / end actions passthru / mark id 2 / end", + "flow create 0 ingress pattern eth type is 0x8100 / end actions passthru / mark id 3 / end", + "flow create 0 ingress pattern eth type is 0x88f7 / end actions passthru / mark id 4 / end"], + "scapy_str": L2_Ethertype, + "check_param": [ + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 1}, + {"port_id": 0, "queue": 0, "mark_id": 1}, + {"port_id": 0, "queue": 0, "mark_id": 2}, + {"port_id": 0, "queue": 0, "mark_id": 2}, + {"port_id": 0, "queue": 0, "mark_id": 3}, + {"port_id": 0, "queue": 0, "mark_id": 3}, + {"port_id": 0, "queue": 0, "mark_id": 4}, + {"port_id": 0, "queue": 0}] +} + +tv_l2_ethertype_mark_rss = { + "name": "test_l2_ethertype_mark_rss", + "rule": [ + "flow create 0 ingress pattern eth type is 0x8863 / end actions rss / mark id 0 / end", + "flow create 0 ingress pattern eth type is 0x8864 / end actions mark id 1 / rss / end", + "flow create 0 ingress pattern eth type is 0x0806 / end actions mark / rss / end", + "flow create 0 ingress pattern eth type is 0x8100 / end actions rss / mark / end", + "flow create 0 ingress pattern eth type is 0x88f7 / end actions mark id 3 / rss / end"], + "scapy_str": L2_Ethertype, + "check_param": [ + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 1}, + {"port_id": 0, "queue": 0, "mark_id": 1}, + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 3}, + {"port_id": 0, "queue": 0}] +} + +tv_l2_ethertype_mark = { + "name": "test_l2_ethertype_mark", + "rule": [ + "flow create 0 ingress pattern eth type is 0x8863 / end actions mark id 0 / end", + "flow create 0 ingress pattern eth type is 0x8864 / end actions mark id 1 / end", + "flow create 0 ingress pattern eth type is 0x0806 / end actions mark id 2 / end", + "flow create 0 ingress pattern eth type is 0x8100 / end actions mark id 2 / end", + "flow create 0 ingress pattern eth type is 0x88f7 / end actions mark / end"], + "scapy_str": L2_Ethertype, + "check_param": [ + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0, "mark_id": 1}, + {"port_id": 0, "queue": 0, "mark_id": 1}, + {"port_id": 0, "queue": 0, "mark_id": 2}, + {"port_id": 0, "queue": 0, "mark_id": 2}, + {"port_id": 0, "queue": 0, "mark_id": 2}, + {"port_id": 0, "queue": 0, "mark_id": 2}, + {"port_id": 0, "queue": 0, "mark_id": 0}, + {"port_id": 0, "queue": 0}] +} + +tv_l2_ethertype_drop = { + "name": "test_l2_ethertype_drop", + "rule": [ + "flow create 0 ingress pattern eth type is 0x8863 / end actions drop / end", + "flow create 0 ingress pattern eth type is 0x8864 / end actions drop / end", + "flow create 0 ingress pattern eth type is 0x0806 / end actions drop / end", + "flow create 0 ingress pattern eth type is 0x8100 / end actions drop / end", + "flow create 0 ingress pattern eth type is 0x88f7 / end actions drop / end"], + "scapy_str": L2_Ethertype, + "check_param": [ + {"port_id": 0, "drop": 1}, + {"port_id": 0, "drop": 1}, + {"port_id": 0, "drop": 1}, + {"port_id": 0, "drop": 1}, + {"port_id": 0, "drop": 1}, + {"port_id": 0, "drop": 1}, + {"port_id": 0, "drop": 1}, + {"port_id": 0, "drop": 1}, + {"port_id": 0, "drop": 1}, + {"port_id": 0, "queue": 0}] +} + +vectors_l2_ethertype = [tv_l2_ethertype_queue_index, + tv_l2_ethertype_queue_group, + tv_l2_ethertype_passthru, + tv_l2_ethertype_drop, + tv_l2_ethertype_mark_rss, + tv_l2_ethertype_mark] class TestCVLFdir(TestCase): @@ -1306,6 +1456,36 @@ class TestCVLFdir(TestCase): failed_cases.append(k) self.verify(all(test_results.values()), "{} failed.".format(failed_cases)) + def _multirules_process(self, vectors, port_id=0): + # create rules on only one port + test_results = {} + rule_li = [] + for tv in vectors: + try: + port_id = port_id + pkts=tv["scapy_str"] + check_param=tv["check_param"] + self.destroy_fdir_rule(rule_id=rule_li, port_id=port_id) + + # validate rules and create rules + rule_li = self.create_fdir_rule(tv["rule"], check_stats=True) + + for i in range(len(pkts)): + port_id = check_param[i]["port_id"] + out = self.send_pkts_getouput(pkts=pkts[i], drop=check_param[i].get("drop")) + rfc.check_mark(out, pkt_num=1, check_param=check_param[i]) + test_results[tv["name"]] = True + print((GREEN("case passed: %s" % tv["name"]))) + except Exception as e: + print((RED(e))) + test_results[tv["name"]] = False + continue + failed_cases = [] + for k, v in list(test_results.items()): + if not v: + failed_cases.append(k) + self.verify(all(test_results.values()), "{} failed.".format(failed_cases)) + def set_up_all(self): """ Run at the start of each test suite. @@ -1705,15 +1885,22 @@ class TestCVLFdir(TestCase): self.check_fdir_rule(stats=True, rule_list=rule_li) def test_conflicted_rules(self): - rule1 = "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 1 / end" + rule1 = [ + 'flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 1 / end', + 'flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queue index 1 / mark / end'] rule_li = self.create_fdir_rule(rule1, check_stats=True) rule2 = [ "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 2 / end", "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions drop / end", + 'flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queue index 2 / mark / end', + 'flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions rss queues 2 3 end / mark / end', 'flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 3 / mark / end', - 'flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions queue index 3 / mark / end'] - self.create_fdir_rule(rule2[0:2], check_stats=False, msg="Rule already exists!: File exists", validate=False) - self.create_fdir_rule(rule2[2:], check_stats=False, msg="Invalid input action number: Invalid argument", validate=False) + 'flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions queue index 3 / mark / end', + 'flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2021 / end actions mark / end', + 'flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / udp src is 22 dst is 23 / end actions queue index 1 / mark / end'] + self.create_fdir_rule(rule2[0:4], check_stats=False, msg="Rule already exists!: File exists", validate=False) + self.create_fdir_rule(rule2[4:7], check_stats=False, msg="Invalid input action number: Invalid argument", validate=False) + self.create_fdir_rule(rule2[7:], check_stats=False, msg="Invalid input set: Invalid argument", validate=False) self.check_fdir_rule(stats=True, rule_list=rule_li) def test_conflicted_actions(self): @@ -2091,7 +2278,7 @@ class TestCVLFdir(TestCase): eal_param = self.dut.create_eal_parameters(cores="1S/4C/1T", ports=[self.pci0 + ",flow-mark-support=1", self.pci1 + ",flow-mark-support=1"], socket=self.ports_socket) - param = " -- -i --portmask=%s --rxq=%d --txq=%d --port-topology=loop --cmdline-file=%s" % ( + param = " --log-level='ice,7' -- -i --portmask=%s --rxq=%d --txq=%d --port-topology=loop --cmdline-file=%s" % ( self.portMask, 64, 64, cmd_path) command_line = self.dut.target + "/app/testpmd " + eal_param + param out = self.dut.send_expect(command_line, 'testpmd>', timeout=600) @@ -2197,7 +2384,7 @@ class TestCVLFdir(TestCase): out = self.pmd_output.start_testpmd(cores="1S/4C/1T", param="--portmask=%s --rxq=%d --txq=%d --port-topology=loop --cmdline-file=%s" % ( self.portMask, 64, 64, cmd_path), - eal_param="-w %s,flow-mark-support=1 -w %s,flow-mark-support=1" % ( + eal_param="-w %s,flow-mark-support=1 -w %s,flow-mark-support=1 --log-level='ice,7'" % ( self.pci0, self.pci1), socket=self.ports_socket) self.verify('Failed to create flow' not in out, "create some rule failed") self.config_testpmd() @@ -2271,6 +2458,15 @@ class TestCVLFdir(TestCase): def test_mac_ipv4_gtpu(self): self._rte_flow_validate(vectors_mac_ipv4_gtpu) + def test_l2_ethertype(self): + self._multirules_process(vectors_l2_ethertype) + + def test_unsupported_ethertype(self): + rule = ['flow create 0 ingress pattern eth type is 0x0800 / end actions queue index 1 / end', + 'flow create 0 ingress pattern eth type is 0x86dd / end actions queue index 1 / end'] + self.create_fdir_rule(rule, check_stats=True, msg="Succeeded to create (2) flow") + self.check_fdir_rule(stats=True) + def tear_down(self): # destroy all flow rule on port 0 self.dut.send_command("flow flush 0", timeout=1)