From patchwork Tue Sep 6 18:44:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jiale, SongX" X-Patchwork-Id: 115964 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 0C043A054A; Tue, 6 Sep 2022 12:30:20 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BCDC140697; Tue, 6 Sep 2022 12:30:18 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id B0A23400D6 for ; Tue, 6 Sep 2022 12:30:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662460217; x=1693996217; h=from:to:cc:subject:date:message-id; bh=ZXl6XMb+bw+3Ded1rYfzcz0W6QROyGTc4nzSfXsd5RE=; b=UE6d5zy2Xa8i7Lbduz1YSR+ZxSGpZ4Wm83QeqNlf1ArVjcWGKU2OG5/u 4A1+s4xqJexuYraE3PtgfAKB+0/9k+1lRRWswUTcG/wvkWncGtH33qxzv wD1/1RTaGGE9Omit0U4jqX0cjYDaBXtSN54DLGVcPVGo6g8MxdJuvs27Z TdOUVxGpnbXMlSWOlc4QLtoaLSVfi421Fr5CHXRg3MNF6cxO3yR6lnUZQ 6/uiijdil6+gxkMwKYke8cS4CrNIkY07OHzf8KVxbJ1mfFZNkRBH+6ie6 2aVtiHQ3kq45Gb8RGLoc5KyiI2wXwB1ALQ97NYr22phDC83RgWlFxnLzX Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10461"; a="279573550" X-IronPort-AV: E=Sophos;i="5.93,294,1654585200"; d="scan'208";a="279573550" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Sep 2022 03:30:08 -0700 X-IronPort-AV: E=Sophos;i="5.93,294,1654585200"; d="scan'208";a="675636345" Received: from unknown (HELO localhost.localdomain) ([10.239.252.94]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Sep 2022 03:30:04 -0700 From: Song Jiale To: dts@dpdk.org Cc: Song Jiale Subject: [dts] [PATCH V3 1/2] test_plans/ice_dcf_switch_filter: add case Date: Tue, 6 Sep 2022 18:44:46 +0000 Message-Id: <20220906184447.21238-1-songx.jiale@intel.com> X-Mailer: git-send-email 2.17.1 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 case to test l4 mask. Signed-off-by: Song Jiale --- .../ice_dcf_switch_filter_test_plan.rst | 352 ++++++++++++++++++ 1 file changed, 352 insertions(+) diff --git a/test_plans/ice_dcf_switch_filter_test_plan.rst b/test_plans/ice_dcf_switch_filter_test_plan.rst index 0d38c218..ed836b67 100644 --- a/test_plans/ice_dcf_switch_filter_test_plan.rst +++ b/test_plans/ice_dcf_switch_filter_test_plan.rst @@ -3582,3 +3582,355 @@ Subcase 8: DCF DROP blend PACKAGES check the rules not exist in the list. send matched packets, check port can receive the packet. + +Subcase 9: MAC_IPV4_TCP + L4 MASK + drop +----------------------------------------- +1. validate a rule:: + + testpmd> flow validate 0 priority 0 ingress pattern eth / ipv4 / tcp src spec 2345 src mask 0x0f0f / end actions drop / end + + get the message:: + + Flow rule validated + + check the flow list:: + + testpmd> flow list 0 + + check the rule not exists in the list. + +2. create MAC_IPV4_L2TP_PAY rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / tcp src spec 2345 src mask 0x0f0f / end actions drop / end + testpmd> flow list 0 + + check the rule exists in the list. + +3. send matched packets:: + + sendp([Ether(dst={vf1_mac})/IP()/TCP(sport=2313,dport=23)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can't receive the packet. + +4. send mismatched packets:: + + sendp([Ether(dst={vf1_mac})/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=2344,dport=23)/Raw("x"*80)], iface="enp27s0f0", count=1) + sendp([Ether(dst={vf1_mac})/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=2601,dport=23)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can receive the packet. + +5. verify rules can be destroyed:: + + testpmd> flow flush 0 + testpmd> flow list 0 + + check the rules not exist in the list. + send matched packets, check port 1 can receive the packet. + +Subcase 10: MAC_IPV6_UDP + L4 MASK + drop +------------------------------------------ +1. validate a rule:: + + testpmd> flow validate 0 priority 0 ingress pattern eth / ipv6 / udp dst spec 3333 dst mask 0x0ff0 / end actions drop / end + + get the message:: + + Flow rule validated + + check the flow list:: + + testpmd> flow list 0 + + check the rule not exists in the list. + +2. create MAC_IPV4_L2TP_PAY rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 / udp dst spec 3333 dst mask 0x0ff0 / end actions drop / end + testpmd> flow list 0 + + check the rule exists in the list. + +3. send matched packets:: + + sendp([Ether(dst={vf1_mac})/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/UDP(sport=10,dport=3328)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can't receive the packet. + +4. send mismatched packets:: + + sendp([Ether(dst={vf1_mac})/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/UDP(sport=50,dport=3077)/Raw("x"*80)], iface="enp27s0f0", count=1) + sendp([Ether(dst={vf1_mac})/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/UDP(sport=50,dport=3349)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can receive the packet. + +5. verify rules can be destroyed:: + + testpmd> flow flush 0 + testpmd> flow list 0 + + check the rules not exist in the list. + send matched packets, check port 1 can receive the packet. + +Subcase 11: MAC_IPV4_UDP_VXLAN_MAC_IPV4_TCP + L4 MASK + drop +------------------------------------------------------------- +1. validate a rule:: + + testpmd> rx_vxlan_port add 4789 0 + testpmd> flow validate 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 / tcp src spec 32 src mask 0x0f / end actions drop / end + + get the message:: + + Flow rule validated + + check the flow list:: + + testpmd> flow list 0 + + check the rule not exists in the list. + +2. create MAC_IPV4_L2TP_PAY rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 / tcp src spec 32 src mask 0x0f / end actions drop / end + testpmd> flow list 0 + + check the rule exists in the list. + +3. send matched packets:: + + sendp([Ether(dst={vf1_mac})/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=16,dport=22)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can't receive the packet. + +4. send mismatched packets:: + + sendp([Ether(dst={vf1_mac})/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=33,dport=22)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can receive the packet. + +5. verify rules can be destroyed:: + + testpmd> flow flush 0 + testpmd> flow list 0 + + check the rules not exist in the list. + send matched packets, check port 1 can receive the packet. + +Subcase 12: MAC_IPV4_NVGRE_MAC_IPV4_TCP + L4 MASK + drop +--------------------------------------------------------- +1. validate a rule:: + + testpmd> flow validate 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp dst spec 1280 dst mask 0x00ff / end actions drop / end + + get the message:: + + Flow rule validated + + check the flow list:: + + testpmd> flow list 0 + + check the rule not exists in the list. + +2. create MAC_IPV4_L2TP_PAY rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp dst spec 1280 dst mask 0x00ff / end actions drop / end + testpmd> flow list 0 + + check the rule exists in the list. + +3. send matched packets:: + + sendp([Ether(dst={vf1_mac})/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=50,dport=1536)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can't receive the packet. + +4. send mismatched packets:: + + sendp([Ether(dst={vf1_mac})/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=50,dport=1281)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can receive the packet. + +5. verify rules can be destroyed:: + + testpmd> flow flush 0 + testpmd> flow list 0 + + check the rules not exist in the list. + send matched packets, check port 1 can receive the packet. + +Test case: IPv4/IPv6 + TCP/UDP + L4 MASK +======================================== +Subcase 1: MAC_IPV4_UDP + L4 MASK + single vf +---------------------------------------------- +1. validate a rule:: + + testpmd> flow validate 0 priority 0 ingress pattern eth / ipv4 / udp src spec 2152 src mask 0xff00 dst spec 1281 dst mask 0x00ff / end actions vf id 1 / end + + get the message:: + + Flow rule validated + + check the flow list:: + + testpmd> flow list 0 + + check the rule not exists in the list. + +2. create MAC_IPV4_L2TP_PAY rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp src spec 2152 src mask 0xff00 dst spec 1281 dst mask 0x00ff / end actions vf id 1 / end + testpmd> flow list 0 + + check the rule exists in the list. + +3. send matched packets:: + + sendp([Ether(dst="00:11:22:33:44:66")/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2048,dport=1)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 receive the packet. + +4. send mismatched packets:: + + sendp([Ether(dst="00:11:22:33:44:66")/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2047,dport=2)/Raw("x"*80)], iface="enp27s0f0", count=1) + sendp([Ether(dst="00:11:22:33:44:66")/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2058,dport=3586)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can not receive the packet. + +5. verify rules can be destroyed:: + + testpmd> flow flush 0 + testpmd> flow list 0 + + check the rules not exist in the list. + send matched packets, check port 1 can not receive the packet. + +Subcase 2: MAC_IPV6_TCP + L4 MASK + single vf +---------------------------------------------- +1. validate a rule:: + + testpmd> flow validate 0 priority 0 ingress pattern eth / ipv6 / tcp dst spec 3333 dst mask 0x0ff0 / end actions vf id 1 / end + + get the message:: + + Flow rule validated + + check the flow list:: + + testpmd> flow list 0 + + check the rule not exists in the list. + +2. create MAC_IPV4_L2TP_PAY rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 / tcp dst spec 3333 dst mask 0x0ff0 / end actions vf id 1 / end + testpmd> flow list 0 + + check the rule exists in the list. + +3. send matched packets:: + + sendp([Ether(dst="00:11:22:33:44:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=10,dport=3328)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 receive the packet. + +4. send mismatched packets:: + + sendp([Ether(dst="00:11:22:33:44:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=50,dport=3077)/Raw("x"*80)], iface="enp27s0f0", count=1) + sendp([Ether(dst="00:11:22:33:44:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=50,dport=3349)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can not receive the packet. + +5. verify rules can be destroyed:: + + testpmd> flow flush 0 + testpmd> flow list 0 + + check the rules not exist in the list. + send matched packets, check port 1 can not receive the packet. + +Subcase 3: MAC_IPV4_UDP_VXLAN_MAC_IPV4_UDP + L4 MASK + single vf +----------------------------------------------------------------- +1. validate a rule:: + + testpmd> rx_vxlan_port add 4789 0 + testpmd> flow validate 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 / udp src spec 32 src mask 0x0f / end actions vf id 1 / end + + get the message:: + + Flow rule validated + + check the flow list:: + + testpmd> flow list 0 + + check the rule not exists in the list. + +2. create MAC_IPV4_L2TP_PAY rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 / udp src spec 32 src mask 0x0f / end actions vf id 1 / end + testpmd> flow list 0 + + check the rule exists in the list. + +3. send matched packets:: + + sendp([Ether(dst="00:11:22:33:44:66")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=16,dport=22)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 receive the packet. + +4. send mismatched packets:: + + sendp([Ether(dst="00:11:22:33:44:66")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=33,dport=22)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can not receive the packet. + +5. verify rules can be destroyed:: + + testpmd> flow flush 0 + testpmd> flow list 0 + + check the rules not exist in the list. + send matched packets, check port 1 can not receive the packet. + +Subcase 4: MAC_IPV4_NVGRE_MAC_IPV4_UDP + L4 MASK + single vf +------------------------------------------------------------- +1. validate a rule:: + + testpmd> flow validate 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src spec 1280 src mask 0x00ff / end actions vf id 1 / end + + get the message:: + + Flow rule validated + + check the flow list:: + + testpmd> flow list 0 + + check the rule not exists in the list. + +2. create MAC_IPV4_L2TP_PAY rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src spec 1280 src mask 0x00ff / end actions vf id 1 / end + testpmd> flow list 0 + + check the rule exists in the list. + +3. send matched packets:: + + sendp([Ether(dst="00:11:22:33:44:66")/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=1536)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 receive the packet. + +4. send mismatched packets:: + + sendp([Ether(dst="00:11:22:33:44:66")/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=1281)/Raw("x"*80)], iface="enp27s0f0", count=1) + + check port 1 can not receive the packet. + +5. verify rules can be destroyed:: + + testpmd> flow flush 0 + testpmd> flow list 0 + + check the rules not exist in the list. + send matched packets, check port 1 can not receive the packet. \ No newline at end of file From patchwork Tue Sep 6 18:44:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jiale, SongX" X-Patchwork-Id: 115963 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 C619FA0542; Tue, 6 Sep 2022 12:30:18 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9BE4240143; Tue, 6 Sep 2022 12:30:18 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id C5A52400D6 for ; Tue, 6 Sep 2022 12:30:16 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662460216; x=1693996216; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=g8bnV2NmsktLPk3vI6q+PNByW6U+s0LtycBim8JuuBE=; b=HQgRXcte6jI91qUIjDQ6xG/8kYoO4sLN+VYs1ikGzSfUK9gbudmKRoob JgPIfoGUhBnqHayw8c2eaf+KWws2/yUebnb3j5Lo/q0XW53Rp2uJ+K0iT sNf91IiNzYZ8ogO5CSQdcm7m3n0dmXGCR52amuDRmNqcPzZLHj2ijxGdh Rl9FeSojj2Ulb/GyIOJYFp8eZLDyc5vE/l+fNmGPhm1RKmJaQyBwYXiWI jjWyF9bmFYTY9pZwCrMiyGoWEOYk3eBTxQ0l2wESMx20QORaLXpb6WDQd 2bAci/LGgVKPoZbBAoAWfM5VSeJzZQO+gM7O+9XFQNfKIkCi1j5BGWDsU A==; X-IronPort-AV: E=McAfee;i="6500,9779,10461"; a="279573547" X-IronPort-AV: E=Sophos;i="5.93,294,1654585200"; d="scan'208";a="279573547" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Sep 2022 03:30:07 -0700 X-IronPort-AV: E=Sophos;i="5.93,294,1654585200"; d="scan'208";a="675636343" Received: from unknown (HELO localhost.localdomain) ([10.239.252.94]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Sep 2022 03:30:06 -0700 From: Song Jiale To: dts@dpdk.org Cc: Song Jiale Subject: [dts] [PATCH V3 2/2] tests/ice_dcf_switch_filter: add case Date: Tue, 6 Sep 2022 18:44:47 +0000 Message-Id: <20220906184447.21238-2-songx.jiale@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220906184447.21238-1-songx.jiale@intel.com> References: <20220906184447.21238-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 add case to test l4 mask. Signed-off-by: Song Jiale --- tests/TestSuite_ice_dcf_switch_filter.py | 291 ++++++++++++++++++++++- 1 file changed, 288 insertions(+), 3 deletions(-) diff --git a/tests/TestSuite_ice_dcf_switch_filter.py b/tests/TestSuite_ice_dcf_switch_filter.py index 3c647be6..c3fce696 100644 --- a/tests/TestSuite_ice_dcf_switch_filter.py +++ b/tests/TestSuite_ice_dcf_switch_filter.py @@ -1388,6 +1388,145 @@ tv_add_two_rules_with_different_input_set_different_vf_id = { }, } +# l4 mask +# ipv4/ipv6 + udp/tcp +mac_ipv4_udp_l4_mask_scapy_str = { + "matched": [ + 'Ether(dst="00:11:22:33:44:66")/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2048,dport=1)/Raw("x"*80)', + ], + "mismatched": [ + 'Ether(dst="00:11:22:33:44:66")/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2047,dport=2)/Raw("x"*80)', + 'Ether(dst="00:11:22:33:44:66")/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2058,dport=3586)/Raw("x"*80)', + ], +} +tv_mac_ipv4_udp_l4_mask_in_single_vf_01 = { + "name": "tv_mac_ipv4_udp_l4_mask_in_single_vf_01", + "rte_flow_pattern": "flow create 0 priority 0 ingress pattern eth / ipv4 / udp src spec 2152 src mask 0xff00 dst spec 1281 dst mask 0x00ff / end actions vf id 1 / end", + "matched": { + "scapy_str": mac_ipv4_udp_l4_mask_scapy_str["matched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": { + "expect_pkts": len(mac_ipv4_udp_l4_mask_scapy_str["matched"]) + }, + }, + "mismatched": { + "scapy_str": mac_ipv4_udp_l4_mask_scapy_str["mismatched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} + +mac_ipv6_udp_l4_mask_scapy_str = { + "matched": [ + 'Ether(dst="00:11:22:33:44:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=10,dport=3328)/Raw("x"*80)', + ], + "mismatched": [ + 'Ether(dst="00:11:22:33:44:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=50,dport=3077)/Raw("x"*80)', + 'Ether(dst="00:11:22:33:44:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=50,dport=3349)/Raw("x"*80)', + ], +} +tv_mac_ipv6_tcp_l4_mask_in_single_vf_02 = { + "name": "tv_mac_ipv6_tcp_l4_mask_in_single_vf_02", + "rte_flow_pattern": "flow create 0 priority 0 ingress pattern eth / ipv6 / tcp dst spec 3333 dst mask 0x0ff0 / end actions vf id 1 / end", + "matched": { + "scapy_str": mac_ipv6_udp_l4_mask_scapy_str["matched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": { + "expect_pkts": len(mac_ipv6_udp_l4_mask_scapy_str["matched"]) + }, + }, + "mismatched": { + "scapy_str": mac_ipv6_udp_l4_mask_scapy_str["mismatched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} + +# test vxlan l4 mask +mac_ipv4_udp_vxlan_eth_ipv4_udp_l4_mask_scapy_str = { + "matched": [ + 'Ether(dst="00:11:22:33:44:66")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=16,dport=22)/Raw("x"*80)', + ], + "mismatched": [ + 'Ether(dst="00:11:22:33:44:66")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=33,dport=22)/Raw("x"*80)' + ], +} +tv_mac_ipv4_udp_vxlan_eth_ipv4_udp_l4_mask_in_single_vf_03 = { + "name": "tv_mac_ipv4_udp_vxlan_eth_ipv4_udp_l4_mask_in_single_vf_03", + "rte_flow_pattern": "flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 / udp src spec 32 src mask 0x0f / end actions vf id 1 / end", + "matched": { + "scapy_str": mac_ipv4_udp_vxlan_eth_ipv4_udp_l4_mask_scapy_str["matched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": { + "expect_pkts": len( + mac_ipv4_udp_vxlan_eth_ipv4_udp_l4_mask_scapy_str["matched"] + ) + }, + }, + "mismatched": { + "scapy_str": mac_ipv4_udp_vxlan_eth_ipv4_udp_l4_mask_scapy_str["mismatched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} + +# test nvgre l4 mask +mac_ipv4_nvgre_eth_ipv4_udp_l4_mask_scapy_str = { + "matched": [ + 'Ether(dst="00:11:22:33:44:66")/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=1536)/Raw("x"*80)', + ], + "mismatched": [ + 'Ether(dst="00:11:22:33:44:66")/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=1281)/Raw("x"*80)', + ], +} +tv_mac_ipv4_nvgre_eth_ipv4_udp_l4_mask_in_single_vf_04 = { + "name": "tv_mac_ipv4_nvgre_eth_ipv4_udp_l4_mask_in_single_vf_04", + "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src spec 1280 src mask 0x00ff / end actions vf id 1 / end", + "matched": { + "scapy_str": mac_ipv4_nvgre_eth_ipv4_udp_l4_mask_scapy_str["matched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": { + "expect_pkts": len(mac_ipv4_nvgre_eth_ipv4_udp_l4_mask_scapy_str["matched"]) + }, + }, + "mismatched": { + "scapy_str": mac_ipv4_nvgre_eth_ipv4_udp_l4_mask_scapy_str["mismatched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} + +tvs_l4_mask = [ + tv_mac_ipv4_udp_l4_mask_in_single_vf_01, + tv_mac_ipv6_tcp_l4_mask_in_single_vf_02, + tv_mac_ipv4_udp_vxlan_eth_ipv4_udp_l4_mask_in_single_vf_03, + tv_mac_ipv4_nvgre_eth_ipv4_udp_l4_mask_in_single_vf_04, +] + tv_mac_ipv4_drop = { "name": "tv_mac_ipv4_drop", "rte_flow_pattern": "flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.1 / end actions drop / end", @@ -1632,6 +1771,134 @@ tv_mac_blend_pkg_drop = { }, } +vf1_mac = "00:11:22:33:44:55" +mac_ipv4_tcp_l4_mask_scapy_str = { + "matched": [ + 'Ether(dst="%s")/IP()/TCP(sport=2313,dport=23)/Raw("x"*80)' % vf1_mac, + ], + "mismatched": [ + 'Ether(dst="%s")/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=2344,dport=23)/Raw("x"*80)' + % vf1_mac, + 'Ether(dst="%s")/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=2601,dport=23)/Raw("x"*80)' + % vf1_mac, + ], +} +tv_mac_ipv4_tcp_l4_mask_drop = { + "name": "tv_mac_ipv4_tcp_l4_mask_drop", + "rte_flow_pattern": "flow create 0 priority 0 ingress pattern eth / ipv4 / tcp src spec 2345 src mask 0x0f0f / end actions drop / end", + "matched": { + "scapy_str": mac_ipv4_tcp_l4_mask_scapy_str["matched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, + "mismatched": { + "scapy_str": mac_ipv4_tcp_l4_mask_scapy_str["mismatched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 2}, + }, +} + +mac_ipv6_tcp_l4_mask_scapy_str = { + "matched": [ + 'Ether(dst="%s")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/UDP(sport=10,dport=3328)/Raw("x"*80)' + % vf1_mac, + ], + "mismatched": [ + 'Ether(dst="%s")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/UDP(sport=50,dport=3077)/Raw("x"*80)' + % vf1_mac, + 'Ether(dst="%s")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/UDP(sport=50,dport=3349)/Raw("x"*80)' + % vf1_mac, + ], +} +tv_mac_ipv6_udp_l4_mask_drop = { + "name": "tv_mac_ipv6_udp_l4_mask_drop", + "rte_flow_pattern": "flow create 0 priority 0 ingress pattern eth / ipv6 / udp dst spec 3333 dst mask 0x0ff0 / end actions drop / end", + "matched": { + "scapy_str": mac_ipv6_tcp_l4_mask_scapy_str["matched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, + "mismatched": { + "scapy_str": mac_ipv6_tcp_l4_mask_scapy_str["mismatched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 2}, + }, +} + +mac_ipv4_udp_vxlan_eth_ipv4_tcp_l4_mask_scapy_str = { + "matched": [ + 'Ether(dst="%s")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=16,dport=22)/Raw("x"*80)' + % vf1_mac, + ], + "mismatched": [ + 'Ether(dst="%s")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=33,dport=22)/Raw("x"*80)' + % vf1_mac, + ], +} +tv_mac_ipv4_udp_vxlan_eth_ipv4_tcp_l4_mask_drop = { + "name": "tv_mac_ipv4_udp_vxlan_eth_ipv4_tcp_l4_mask_drop", + "rte_flow_pattern": "flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 / tcp src spec 32 src mask 0x0f / end actions drop / end", + "matched": { + "scapy_str": mac_ipv4_udp_vxlan_eth_ipv4_tcp_l4_mask_scapy_str["matched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, + "mismatched": { + "scapy_str": mac_ipv4_udp_vxlan_eth_ipv4_tcp_l4_mask_scapy_str["mismatched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 1}, + }, +} + +mac_ipv4_nvgre_eth_ipv4_tcp_l4_mask_scapy_str = { + "matched": [ + 'Ether(dst="%s")/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=50,dport=1536)/Raw("x"*80)' + % vf1_mac, + ], + "mismatched": [ + 'Ether(dst="%s")/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=50,dport=1281)/Raw("x"*80)' + % vf1_mac, + ], +} +tv_mac_ipv4_nvgre_eth_ipv4_tcp_l4_mask_drop = { + "name": "tv_mac_ipv4_nvgre_eth_ipv4_tcp_l4_mask_drop", + "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp dst spec 1280 dst mask 0x00ff / end actions drop / end", + "matched": { + "scapy_str": mac_ipv4_nvgre_eth_ipv4_tcp_l4_mask_scapy_str["matched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, + "mismatched": { + "scapy_str": mac_ipv4_nvgre_eth_ipv4_tcp_l4_mask_scapy_str["mismatched"], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 1}, + }, +} + sv_mac_test_drop_action = [ tv_mac_ipv4_drop, tv_mac_ipv4_mask_drop, @@ -1642,6 +1909,10 @@ sv_mac_test_drop_action = [ tv_mac_l2tp_drop, tv_mac_esp_drop, tv_mac_blend_pkg_drop, + tv_mac_ipv4_tcp_l4_mask_drop, + tv_mac_ipv6_udp_l4_mask_drop, + tv_mac_ipv4_udp_vxlan_eth_ipv4_tcp_l4_mask_drop, + tv_mac_ipv4_nvgre_eth_ipv4_tcp_l4_mask_drop, ] @@ -1719,8 +1990,7 @@ class ICEDCFSwitchFilterTest(TestCase): time.sleep(5) def reload_ice(self): - self.dut.send_expect("rmmod ice", "# ", 15) - self.dut.send_expect("modprobe ice", "# ", 15) + self.dut.send_expect("rmmod ice && modprobe ice", "# ", 60) def set_up(self): """ @@ -1748,8 +2018,8 @@ class ICEDCFSwitchFilterTest(TestCase): launch testpmd with the command """ command = self.create_testpmd_command() - out = self.dut.send_expect(command, "testpmd> ", 15) self.testpmd_status = "running" + out = self.dut.send_expect(command, "testpmd> ", 30) self.dut.send_expect("set portlist 1", "testpmd> ", 15) self.dut.send_expect("set fwd rxonly", "testpmd> ", 15) self.dut.send_expect("set verbose 1", "testpmd> ", 15) @@ -2640,6 +2910,7 @@ class ICEDCFSwitchFilterTest(TestCase): 'ip link set %s vf 1 mac "00:11:22:33:44:55"' % self.pf0_intf, "# " ) self.launch_testpmd() + self.dut.send_expect("rx_vxlan_port add 4789 0", "testpmd> ") for pattern in sv_mac_test_drop_action: # validate a rule self.validate_switch_filter_rule(pattern["rte_flow_pattern"]) @@ -2666,6 +2937,20 @@ class ICEDCFSwitchFilterTest(TestCase): self.dut.send_expect("flow flush 0", "testpmd> ", 15) self.dut.send_expect("clear port stats all", "testpmd> ", 15) + # l4 mask + def test_l4_mask(self): + self.setup_1pf_vfs_env() + self.dut.send_expect( + "ip link set %s vf 1 mac 00:11:22:33:44:55" % self.pf0_intf, "# " + ) + self.launch_testpmd() + self.dut.send_expect("rx_vxlan_port add 4789 0", "testpmd> ") + try: + for sub_case in tvs_l4_mask: + self._rte_flow_validate_pattern(sub_case, launch_testpmd=False) + except Exception as ex: + raise ex + def tear_down(self): """ Run after each test case.