From patchwork Mon Jul 25 05:21:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: hailinx X-Patchwork-Id: 114210 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 42624A00C4; Tue, 26 Jul 2022 07:23:52 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3CB3B40DDD; Tue, 26 Jul 2022 07:23:52 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mails.dpdk.org (Postfix) with ESMTP id 73CD340695 for ; Tue, 26 Jul 2022 07:23:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1658813030; x=1690349030; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=rVIJZoGPEBTPAaPwdnHQe4q7j2wfm5qBg+/ZaTX5FC0=; b=KfntQYnkXZxp+p97hSQz5taP5eGvmqr87G+CwAKgFXnZtouvpVjOXs4j MCyVDcjmNwBF6SAKrDvU76sB/9z0olZ+DHteDPv2NOKfsz9KAlulLkuKc A/7Cq58zWUdyt4blnDq2sF/8SO8M5UD17d8e153TPyhK+nudLycRm3NQm C8/3yq5UC4AuNtyLYvbAPsrx72zQuOYqKd6IMcdjjxTbJdy4KOVU3d6WN hTl/73SXusgyMVMFBLG7H6yNL3rZRr9xW52XM4rlw99nH5N4D4TT2WN0t Bc21goBuiXNB+oTE0xS3zgg4AXGVy+OqvvOsk3c3YmaweWah2IvCPvmU7 Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10419"; a="268252519" X-IronPort-AV: E=Sophos;i="5.93,193,1654585200"; d="scan'208";a="268252519" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jul 2022 22:23:38 -0700 X-IronPort-AV: E=Sophos;i="5.93,193,1654585200"; d="scan'208";a="550263355" Received: from unknown (HELO localhost.localdomain) ([10.239.252.63]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jul 2022 22:23:36 -0700 From: hailinx xu To: qi.fu@intel.com, dts@dpdk.org Cc: hailinx xu Subject: [dts][PATCH v1 1/2] test_plans/ice_fdir: support ipv6 next protocol id Date: Mon, 25 Jul 2022 13:21:36 +0800 Message-Id: <20220725052137.25801-2-hailinx.xu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220725052137.25801-1-hailinx.xu@intel.com> References: <20220725052137.25801-1-hailinx.xu@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 add ice support ipv6 next protocol id test plans --- test_plans/ice_fdir_test_plan.rst | 181 ++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) diff --git a/test_plans/ice_fdir_test_plan.rst b/test_plans/ice_fdir_test_plan.rst index 1bb11ae1..09a5cd40 100644 --- a/test_plans/ice_fdir_test_plan.rst +++ b/test_plans/ice_fdir_test_plan.rst @@ -4203,3 +4203,184 @@ So there can be created 14848 fdir rules on 1 PF port. there is no rule listed. 6. verify matched packets for rule 0 and rule 15359 received without FDIR matched ID. + + +Test_Case: IPV6 +=================== +match packets:: + + sendp([Ether(dst='00:11:22:33:44:55')/IPv6(nh=123)/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=123)/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=123)/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=123)/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=123)/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=123)/Raw('x'*40)],iface="ens192f0") + +mismatch packets:: + + sendp([Ether(dst='00:11:22:33:44:55')/IPv6(nh=111)/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/UDP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/TCP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=123)/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/Raw('x'*40)],iface="ens192f0") + + +Subcase 1: index +------------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions queue index 1 / mark / end + +Subcase 1: group +------------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions rss queues 1 2 end / mark id 1 / end + +Subcase 1: passthru +------------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions passthru / mark / end + +Subcase 1: drop +------------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions drop / end + +Subcase 1: mark_rss +------------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions mark / rss / end + +Subcase 1: mark +------------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions mark / end + + +Test_Case: IPV6_TCP +=================== +match packets:: + + sendp([Ether(dst='00:11:22:33:44:55')/IPv6(nh=6)/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/TCP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=6)/TCP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=6)/TCP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=6)/TCP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=6)/TCP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=6)/TCP()/Raw('x'*40)],iface="ens192f0") + +mismatch packets:: + + sendp([Ether(dst='00:11:22:33:44:55')/IPv6(nh=17)/TCP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/UDP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=6)/TCP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/TCP()/Raw('x'*40)],iface="ens192f0") + + +index +------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions queue index 3 / mark / end + +group +------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions rss queues 5 6 end / mark id 1 / end + + +passthru +------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions passthru / mark / end + +drop +-------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions drop / end + +mark +-------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions mark / rss / end + +mark_rss +-------------- +rule:: + + flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions mark / end + + +Test_Case: IPV6_UDP +=================== +match packets:: + + pkt1: sendp([Ether(dst='00:11:22:33:44:55')/IPv6(nh=17)/Raw('x'*40)],iface="ens192f0") + pkt1: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/TCP()/Raw('x'*40)],iface="ens192f0") + pkt2: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=17)/UDP()/Raw('x'*40)],iface="ens192f0") + pkt3: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=17)/UDP()/Raw('x'*40)],iface="ens192f0") + pkt4: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=17)/UDP()/Raw('x'*40)],iface="ens192f0") + pkt5: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=17)/UDP()/Raw('x'*40)],iface="ens192f0") + pkt6: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=17)/UDP()/Raw('x'*40)],iface="ens192f0") + +mismatch packets:: + + sendp([Ether(dst='00:11:22:33:44:55')/IPv6(nh=6)/UDP/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/TCP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=17)/UDP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/UDP()/Raw('x'*40)],iface="ens192f0") + + +1. replace "tcp" with "udp" +2. replace "proto is 6" with "proto is 17" +3. replace "nh=6" with "nh=17" + + +Test_Case: IPV6_SCTP +==================== +match packets:: + + pkt1: sendp([Ether(dst='00:11:22:33:44:55')/IPv6(nh=132)/Raw('x'*40)],iface="ens192f0") + pkt1: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)],iface="ens192f0") + pkt2: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=132)/SCTP()/Raw('x'*40)],iface="ens192f0") + pkt3: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=132)/SCTP()/Raw('x'*40)],iface="ens192f0") + pkt4: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=132)/SCTP()/Raw('x'*40)],iface="ens192f0") + pkt5: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=132)/SCTP()/Raw('x'*40)],iface="ens192f0") + pkt6: sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=123)/IPv6ExtHdrDestOpt(nh=132)/SCTP()/Raw('x'*40)],iface="ens192f0") + +mismatch packets:: + + sendp([Ether(dst='00:11:22:33:44:55')/IPv6(nh=123)/SCTP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/TCP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/UDP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=132)/SCTP()/Raw('x'*40)],iface="ens192f0") + sendp([Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/SCTP()/Raw('x'*40)],iface="ens192f0") + + +1. replace "tcp" with "sctp" +2. replace "proto is 6" with "proto is 132" +3. replace "nh=6" with "nh=132" + + +exclusive test cases +==================== +support priority:: + + rule1: flow create 0 priority 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions queue index 1 / mark / end + +same proto value can't be created twice:: + + rule1: flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions queue index 1 / mark / end + rule2: flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions rss queues 2 3 end / mark / end \ No newline at end of file From patchwork Mon Jul 25 05:21:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: hailinx X-Patchwork-Id: 114211 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 A0901A00C5; Tue, 26 Jul 2022 07:23:52 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5F49A42685; Tue, 26 Jul 2022 07:23:52 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mails.dpdk.org (Postfix) with ESMTP id 018B640DDD for ; Tue, 26 Jul 2022 07:23:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1658813031; x=1690349031; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=pfQUdduJIrS9wLE2JSPimJroAKoi9y3FohdnYmTK4OU=; b=NbNbHqTf7pUmEaNd4weN75ZW8aaxcW7LlNFZ72I1z8Kz7q+xf7UBmbDi K+stm6ESjUYY5c6di9eyy0JMz8owNtl7hE8bocHr/vUyicYxVE9nc+psD t8TLZD3Ev8rbnsVDfDFu0Z4mapJhmHh2L08XCZdLuaAz/v90omKU9ZBbW 68+7Fxm4rzH5JkiLTQzZOkBh1VwYTbkD1JCNlW3Cbm567nX68h70uwLx6 M7Uu5fIpr1WhdBnQytlidGeSmtBWDY3PWAlPmX+UxMakarCeoXwvFc3l0 sxNja6QMuvCp7BJvsd05TZtZeC8IaBJRNnIEhTh55qedF4LnzZsfSNJYX g==; X-IronPort-AV: E=McAfee;i="6400,9594,10419"; a="268252523" X-IronPort-AV: E=Sophos;i="5.93,193,1654585200"; d="scan'208";a="268252523" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jul 2022 22:23:40 -0700 X-IronPort-AV: E=Sophos;i="5.93,193,1654585200"; d="scan'208";a="550263359" Received: from unknown (HELO localhost.localdomain) ([10.239.252.63]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jul 2022 22:23:38 -0700 From: hailinx xu To: qi.fu@intel.com, dts@dpdk.org Cc: hailinx xu Subject: [dts][PATCH v1 2/2] tests/ice_fdir: support ipv6 next protocol id Date: Mon, 25 Jul 2022 13:21:37 +0800 Message-Id: <20220725052137.25801-3-hailinx.xu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220725052137.25801-1-hailinx.xu@intel.com> References: <20220725052137.25801-1-hailinx.xu@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 add ice support ipv6 next protocol id test cases Tested-by: Zhimin Huang --- tests/TestSuite_ice_fdir.py | 331 ++++++++++++++++++++++++++++++++++++ 1 file changed, 331 insertions(+) diff --git a/tests/TestSuite_ice_fdir.py b/tests/TestSuite_ice_fdir.py index 26f32b29..a6e9c9c3 100644 --- a/tests/TestSuite_ice_fdir.py +++ b/tests/TestSuite_ice_fdir.py @@ -377,6 +377,83 @@ MAC_IPV6_NAT_T_ESP = { ], } +# 22.07 new feature +MAC_IPV6_PROTOCOL = { + "match": [ + "Ether(dst='00:11:22:33:44:55')/IPv6(nh=123)/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=123)/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=123)/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=123)/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=123)/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=123)/Raw('x'*40)", + ], + "unmatched": [ + "Ether(dst='00:11:22:33:44:55')/IPv6(nh=111)/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/UDP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/TCP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=123)/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/Raw('x'*40)", + ], +} + +MAC_IPV6_PROTOCOL_TCP = { + "match": [ + "Ether(dst='00:11:22:33:44:55')/IPv6(nh=6)/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6(nh=6)/TCP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=6)/TCP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=6)/TCP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=6)/TCP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=6)/TCP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=6)/TCP()/Raw('x'*40)", + ], + "unmatched": [ + "Ether(dst='00:11:22:33:44:55')/IPv6(nh=17)/TCP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/UDP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=6)/TCP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/TCP()/Raw('x'*40)", + ], +} + +MAC_IPV6_PROTOCOL_UDP = { + "match": [ + "Ether(dst='00:11:22:33:44:55')/IPv6(nh=17)/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/UDP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=17)/UDP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=17)/UDP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=17)/UDP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=17)/UDP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=17)/UDP()/Raw('x'*40)", + ], + "unmatched": [ + "Ether(dst='00:11:22:33:44:55')/IPv6(nh=6)/UDP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/TCP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=6)/UDP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/UDP()/Raw('x'*40)", + ], +} + +MAC_IPV6_PROTOCOL_SCTP = { + "match": [ + "Ether(dst='00:11:22:33:44:55')/IPv6(nh=132)/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=132)/SCTP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=132)/SCTP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=132)/SCTP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=132)/SCTP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=132)/SCTP()/Raw('x'*40)", + ], + "unmatched": [ + "Ether(dst='00:11:22:33:44:55')/IPv6(nh=6)/SCTP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/UDP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/TCP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=6)/SCTP()/Raw('x'*40)", + "Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/SCTP()/Raw('x'*40)", + ], +} + 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 / mark / end", @@ -2682,6 +2759,235 @@ vectors_mac_ipv6_nat_t_esp = [ tv_mac_ipv6_nat_t_esp_mark, ] +# 22.07 new feature +tv_mac_ipv6_protocol_queue_index = { + "name": "test_mac_ipv6_protocol_queue_index", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions queue index 1 / mark / end", + "scapy_str": MAC_IPV6_PROTOCOL, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "queue": 1, "mark_id": 0}, +} + +tv_mac_ipv6_protocol_rss_queues = { + "name": "test_mac_ipv6_protocol_rss_queues", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions rss queues 2 3 end / mark id 1 / end", + "scapy_str": MAC_IPV6_PROTOCOL, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "queue": [2, 3], "mark_id": 1}, +} + +tv_mac_ipv6_protocol_passthru = { + "name": "test_mac_ipv6_protocol_passthru", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions passthru / mark / end", + "scapy_str": MAC_IPV6_PROTOCOL, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "rss": True, "mark_id": 0}, +} + +tv_mac_ipv6_protocol_drop = { + "name": "test_mac_ipv6_protocol_drop", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions drop / end", + "scapy_str": MAC_IPV6_PROTOCOL, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "drop": True}, +} + +tv_mac_ipv6_protocol_mark_rss = { + "name": "test_mac_ipv6_protocol_mark_rss", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions mark / rss / end", + "scapy_str": MAC_IPV6_PROTOCOL, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "mark_id": 0, "rss": True}, +} + +tv_mac_ipv6_protocol_mark = { + "name": "test_mac_ipv6_protocol_mark", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions mark / end", + "scapy_str": MAC_IPV6_PROTOCOL, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "mark_id": 0, "rss": True}, +} + +vectors_mac_ipv6_protocol = [ + tv_mac_ipv6_protocol_queue_index, + tv_mac_ipv6_protocol_rss_queues, + tv_mac_ipv6_protocol_passthru, + tv_mac_ipv6_protocol_drop, + tv_mac_ipv6_protocol_mark_rss, + tv_mac_ipv6_protocol_mark, +] + +tv_mac_ipv6_protocol_tcp_queue_index = { + "name": "test_mac_ipv6_protocol_tcp_queue_index", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions queue index 3 / mark / end", + "scapy_str": MAC_IPV6_PROTOCOL_TCP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "queue": 3, "mark_id": 0}, +} + +tv_mac_ipv6_protocol_tcp_rss_queues = { + "name": "test_mac_ipv6_protocol_tcp_rss_queues", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions rss queues 5 6 end / mark id 1 / end", + "scapy_str": MAC_IPV6_PROTOCOL_TCP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "queue": [5, 6], "mark_id": 1}, +} + +tv_mac_ipv6_protocol_tcp_passthru = { + "name": "test_mac_ipv6_protocol_tcp_passthru", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions passthru / mark / end", + "scapy_str": MAC_IPV6_PROTOCOL_TCP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "rss": True, "mark_id": 0}, +} + +tv_mac_ipv6_protocol_tcp_drop = { + "name": "test_mac_ipv6_protocol_tcp_drop", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions drop / end", + "scapy_str": MAC_IPV6_PROTOCOL_TCP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "drop": True}, +} + +tv_mac_ipv6_protocol_tcp_mark_rss = { + "name": "test_mac_ipv6_protocol_tcp_mark_rss", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions mark / rss / end", + "scapy_str": MAC_IPV6_PROTOCOL_TCP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "mark_id": 0, "rss": True}, +} + +tv_mac_ipv6_protocol_tcp_mark = { + "name": "test_mac_ipv6_protocol_tcp_mark", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions mark / end", + "scapy_str": MAC_IPV6_PROTOCOL_TCP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "mark_id": 0, "rss": True}, +} + +vectors_mac_ipv6_protocol_tcp = [ + tv_mac_ipv6_protocol_tcp_queue_index, + tv_mac_ipv6_protocol_tcp_rss_queues, + tv_mac_ipv6_protocol_tcp_passthru, + tv_mac_ipv6_protocol_tcp_drop, + tv_mac_ipv6_protocol_tcp_mark_rss, + tv_mac_ipv6_protocol_tcp_mark, +] + +tv_mac_ipv6_protocol_udp_queue_index = { + "name": "test_mac_ipv6_protocol_udp_queue_index", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions queue index 3 / mark / end", + "scapy_str": MAC_IPV6_PROTOCOL_UDP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "queue": 3, "mark_id": 0}, +} + +tv_mac_ipv6_protocol_udp_rss_queues = { + "name": "test_mac_ipv6_protocol_udp_rss_queues", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions rss queues 7 8 end / mark id 1 / end", + "scapy_str": MAC_IPV6_PROTOCOL_UDP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "queue": [7, 8], "mark_id": 1}, +} + +tv_mac_ipv6_protocol_udp_passthru = { + "name": "test_mac_ipv6_protocol_udp_passthru", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions passthru / mark / end", + "scapy_str": MAC_IPV6_PROTOCOL_UDP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "rss": True, "mark_id": 0}, +} + +tv_mac_ipv6_protocol_udp_drop = { + "name": "test_mac_ipv6_protocol_udp_drop", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions drop / end", + "scapy_str": MAC_IPV6_PROTOCOL_UDP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "drop": True}, +} + +tv_mac_ipv6_protocol_udp_mark_rss = { + "name": "test_mac_ipv6_protocol_udp_mark_rss", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions mark / rss / end", + "scapy_str": MAC_IPV6_PROTOCOL_UDP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "mark_id": 0, "rss": True}, +} + +tv_mac_ipv6_protocol_udp_mark = { + "name": "test_mac_ipv6_protocol_udp_mark", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions mark / end", + "scapy_str": MAC_IPV6_PROTOCOL_UDP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "mark_id": 0, "rss": True}, +} + +vectors_mac_ipv6_protocol_udp = [ + tv_mac_ipv6_protocol_udp_queue_index, + tv_mac_ipv6_protocol_udp_rss_queues, + tv_mac_ipv6_protocol_udp_passthru, + tv_mac_ipv6_protocol_udp_drop, + tv_mac_ipv6_protocol_udp_mark_rss, + tv_mac_ipv6_protocol_udp_mark, +] + +tv_mac_ipv6_protocol_sctp_queue_index = { + "name": "test_mac_ipv6_protocol_sctp_queue_index", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions queue index 5 / mark id 3 / end", + "scapy_str": MAC_IPV6_PROTOCOL_SCTP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "queue": 5, "mark_id": 3}, +} + +tv_mac_ipv6_protocol_sctp_rss_queues = { + "name": "test_mac_ipv6_protocol_sctp_rss_queues", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions rss queues 1 2 end / mark id 1 / end", + "scapy_str": MAC_IPV6_PROTOCOL_SCTP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "queue": [1, 2], "mark_id": 1}, +} + +tv_mac_ipv6_protocol_sctp_passthru = { + "name": "test_mac_ipv6_protocol_sctp_passthru", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions passthru / mark id 4 / end", + "scapy_str": MAC_IPV6_PROTOCOL_SCTP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "rss": True, "mark_id": 4}, +} + +tv_mac_ipv6_protocol_sctp_drop = { + "name": "test_mac_ipv6_protocol_sctp_drop", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions drop / end", + "scapy_str": MAC_IPV6_PROTOCOL_SCTP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "drop": True}, +} + +tv_mac_ipv6_protocol_sctp_mark_rss = { + "name": "test_mac_ipv6_protocol_sctp_mark_rss", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions mark / rss / end", + "scapy_str": MAC_IPV6_PROTOCOL_SCTP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "mark_id": 0, "rss": True}, +} + +tv_mac_ipv6_protocol_sctp_mark = { + "name": "test_mac_ipv6_protocol_sctp_mark", + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions mark / end", + "scapy_str": MAC_IPV6_PROTOCOL_SCTP, + "check_func": rfc.check_mark, + "check_param": {"port_id": 0, "mark_id": 0, "rss": True}, +} + +vectors_mac_ipv6_protocol_sctp = [ + tv_mac_ipv6_protocol_sctp_queue_index, + tv_mac_ipv6_protocol_sctp_rss_queues, + tv_mac_ipv6_protocol_sctp_passthru, + tv_mac_ipv6_protocol_sctp_drop, + tv_mac_ipv6_protocol_sctp_mark_rss, + tv_mac_ipv6_protocol_sctp_mark, +] + class TestICEFdir(TestCase): def query_count(self, hits_set, hits, port_id=0, rule_id=0): @@ -4169,6 +4475,31 @@ class TestICEFdir(TestCase): ) self.check_fdir_rule(stats=True) + # 22.07 new feature + def test_ipv6_protocal(self): + self._rte_flow_validate(vectors_mac_ipv6_protocol) + + def test_ipv6_protocal_tcp(self): + self._rte_flow_validate(vectors_mac_ipv6_protocol_tcp) + + def test_ipv6_protocal_udp(self): + self._rte_flow_validate(vectors_mac_ipv6_protocol_udp) + + def test_ipv6_protocal_sctp(self): + self._rte_flow_validate(vectors_mac_ipv6_protocol_sctp) + + def test_mac_ipv6_protocol_exclusive(self): + rule = "flow create 0 priority 0 ingress pattern eth / ipv6 proto is 123 / end actions queue index 1 / mark / end" + self.create_fdir_rule(rule, check_stats=True) + self.pmd_output.execute_cmd("flow flush 0") + rule1 = "flow create 0 ingress pattern eth / ipv6 proto is 123 / end actions queue index 1 / mark / end" + rule2 = "flow create 0 ingress pattern eth / ipv6 proto is 123 / end actions rss queues 2 3 end / mark / end" + self.create_fdir_rule(rule1, check_stats=True) + out = self.pmd_output.execute_cmd(rule2) + self.verify( + "Rule already exists!: File exists" in out, "created rule successfully!!!" + ) + def tear_down(self): try: # destroy all flow rule on port 0