From patchwork Fri Dec 17 16:25:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yaqi Tang X-Patchwork-Id: 105198 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 6E3D6A0352; Fri, 17 Dec 2021 09:27:21 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5F9F14013F; Fri, 17 Dec 2021 09:27:21 +0100 (CET) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id DE32340040 for ; Fri, 17 Dec 2021 09:27:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1639729639; x=1671265639; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=vcfNI69tn2mDF+7lmDiF8GPNo3UM2xrwPPiJTw4UjzM=; b=Tgxkeui47TVV+GcVii6OxCAFKO4RhoJ+HKPRBhERc9xGV+x2aPr3z9tV cATFDBzxgGK9kFcX39fN5t79kpLepQXOrNF1iIF2R+9gW4m7p/+KU+z5j hTMYPd2AaePGFjDU89X3NpQf3RdZXnhmLVS8caUN7Kh4BD/90Nv+RKuva 9q6IlbWPxW5KFQMcfggNcd+dmG6i3pwZaFvPGXTqjfEGxkY5hy5lqfzU9 TiZFUpUpcWIoe/sLoab80TGklxlsZ16tOtC94CrdAg/w49pkEGierOH+h LWqvfGg5r88tzOgGmyYUgIjBQDfKyLM8iWGeefI/GYK/NPQ+6o3ZGuzLC Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10200"; a="238453832" X-IronPort-AV: E=Sophos;i="5.88,213,1635231600"; d="scan'208";a="238453832" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2021 00:27:17 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,213,1635231600"; d="scan'208";a="519654682" Received: from dpdk-yaqi.sh.intel.com ([10.67.119.78]) by orsmga008.jf.intel.com with ESMTP; 17 Dec 2021 00:27:15 -0800 From: Yaqi Tang To: dts@dpdk.org Cc: Yaqi Tang Subject: [dts][PATCH V1] test_plans/cvl_qinq: add test plan for cvl qinq switch filter support l4 Date: Fri, 17 Dec 2021 16:25:21 +0000 Message-Id: <20211217162521.618711-1-yaqi.tang@intel.com> X-Mailer: git-send-email 2.25.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 CVL Support l4 for QinQ switch filter in DCF driver, and port can support as eth / vlan / vlan / IP / tcp|udp. Signed-off-by: Yaqi Tang Tested-by: Yaqi Tang < yaqi.tang@intel.com> --- test_plans/cvl_qinq_test_plan.rst | 502 +++++++++++++++++++++++++++++- 1 file changed, 501 insertions(+), 1 deletion(-) diff --git a/test_plans/cvl_qinq_test_plan.rst b/test_plans/cvl_qinq_test_plan.rst index 4f44150b..7032d8f4 100644 --- a/test_plans/cvl_qinq_test_plan.rst +++ b/test_plans/cvl_qinq_test_plan.rst @@ -1533,4 +1533,504 @@ Test case 14: AVF CRC strip and Vlan strip co-exists 10:29:19.995352 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500) 196.222.232.221 > 127.0.0.1: ip-proto-0 480 10:29:19.995424 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500) - 196.222.232.221 > 127.0.0.1: ip-proto-0 480 \ No newline at end of file + 196.222.232.221 > 127.0.0.1: ip-proto-0 480 + +==================================== +CVL DCF QINQ Switch Filter Test Plan +==================================== + +Description +=========== +The test plan includes six test cases, such as MAC_QINQ_IPV4, MAC_QINQ_IPV6, MAC_QINQ_IPV4_UDP, MAC_QINQ_IPV4_TCP, MAC_QINQ_IPV6_UDP, MAC_QINQ_IPV6_TCP. +* Enable QINQ switch filter for IPv4/IPv6, IPv4 + TCP/UDP in non-pipeline mode. +* Enable QINQ switch filter for IPv6 + TCP/UDP in pipeline mode. +CVL support l4 for QinQ switch filter in DCF driver is by dst MAC + outer VLAN id + inner VLAN id + dst IP + dst port, and port can support as eth / vlan / vlan / IP / tcp|udp. + +Prerequisites +============= + +Hardware +-------- +Supportted NICs: columbiaville_25g/columbiaville_100g + +Software +-------- +dpdk: http://dpdk.org/git/dpdk +scapy: http://www.secdev.org/projects/scapy/ + +General Set Up +-------------- +1. Copy specific ice package to /lib/firmware/updates/intel/ice/ddp/ice.pkg, + then load driver:: + + # cp ice_comms-1.3.31.0.pkg /lib/firmware/updates/intel/ice/ddp/ice.pkg + # rmmod ice + # insmod ice.ko + +2. Compile DPDK:: + + # CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib --default-library=static x86_64-native-linuxapp-gcc + # ninja -C x86_64-native-linuxapp-gcc -j 110 + +3. Get the pci device id and interface of DUT and tester. + + # ./usertools/dpdk-devbind.py -s + + 0000:3b:00.0 'Ethernet Controller E810-C for SFP 1593' if=ens785f0 drv=ice unused=vfio-pci + 0000:af:00.0 'Ethernet Controller XXV710 for 25GbE SFP28 158b' if=ens260f0 drv=i40e unused=vfio-pci + +4. Generate 2 VFs on PF0:: + + # echo 2 > /sys/bus/pci/devices/0000:3b:00.0/sriov_numvfs + +5. Get VF pci device id of DUT. + + # ./usertools/dpdk-devbind.py -s + + 0000:3b:01.0 'Ethernet Adaptive Virtual Function 1889' if=ens785f0v0 drv=iavf unused=vfio-pci + 0000:3b:01.1 'Ethernet Adaptive Virtual Function 1889' if=ens785f0v1 drv=iavf unused=vfio-pci + +6. Set VF0 as trust:: + + # ip link set ens785f0 vf 0 trust on + +7. Bind the VF ports of DUT to dpdk:: + + # ./usertools/dpdk-devbind.py -b vfio-pci 3b:01.0 3b:01.1 + +Test case +========= + +Common Steps +------------ +1. Launch the userland ``testpmd`` application on DUT as follows:: + + # ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xf -n 4 -a 3b:01.0,cap=dcf -a 3b:01.1 -- -i + +2. Set verbose:: + + testpmd> set verbose 1 + +3. Set fwd engine and start:: + + testpmd> set fwd rxonly + testpmd> start + +4. Show port info:: + + testpmd> show port info all + + Check the VF0 driver is net_ice_dcf. + +#Non-pipeline mode + +Test Case 1: MAC_QINQ_IPV4 +--------------------------- +The test case enable QINQ switch filter for IPv4 in non-pipeline mode, and port can support as dst MAC + outer VLAN id + inner VLAN id + IPv4. + +Test Steps +~~~~~~~~~~ +1. Validate a rule:: + + testpmd> flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / end actions vf id 1 / end + + Get the message:: + + Flow rule validated + +2. Create a rule and list rules:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / end actions vf id 1 / end + + Get the message:: + + Flow rule #0 created + + Check the flow list:: + + testpmd> flow list 0 + + ID Group Prio Attr Rule + 0 0 0 i-- ETH VLAN VLAN IPV4 => VF + +3. Send matched packet in scapy on tester, check the port 1 of DUT received this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/("X"*80)],iface="ens260f0",count=1) + +DUT:: + + testpmd> port 1/queue 0: received 1 packets + src=A4:BF:01:4D:6F:32 - dst=00:11:22:33:44:55 - type=0x8100 - length=122 - nb_segs=1 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN INNER_L3_IPV4 - l2_len=18 - inner_l2_len=4 - inner_l3_len=20 - Receive queue=0x0 + ol_flags: RTE_MBUF_F_RX_L4_CKSUM_GOOD RTE_MBUF_F_RX_IP_CKSUM_GOOD RTE_MBUF_F_RX_OUTER_L4_CKSUM_UNKNOWN + +4. Send mismatched packet in scapy on tester, check the port 1 of DUT could not receive this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:33",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x2,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP(src="192.168.1.3", dst="192.168.1.2")/("X"*80)],iface="ens260f0",count=1) + +5. Destroy a rule and list rules:: + + testpmd> flow destroy 0 rule 0 + + Get the message:: + + Flow rule #0 destroyed + + Check the flow list:: + + testpmd> flow list 0 + + Check the rule not exists in the list. + Send matched packets in step 3, check the packets are not to port 1. + +Test Case 2: MAC_QINQ_IPV6 +--------------------------- +The test case enable QINQ switch filter for IPv6 in non-pipeline mode, and port can support as dst MAC + outer VLAN id + inner VLAN id + IPv6. + +Test Steps +~~~~~~~~~~ +1. Validate a rule:: + + testpmd> flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions vf id 1 / end + + Get the message:: + + Flow rule validated + +2. Create a rule and list rules:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions vf id 1 / end + + Get the message:: + + Flow rule #0 created + + Check the flow list:: + + testpmd> flow list 0 + + ID Group Prio Attr Rule + 0 0 0 i-- ETH VLAN VLAN IPV6 => VF + +3. Send matched packet in scapy on tester, check the port 1 of DUT received this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*80)],iface="ens260f0",count=1) + +DUT:: + + testpmd> port 1/queue 0: received 1 packets + src=00:00:00:00:00:00 - dst=00:11:22:33:44:55 - type=0x8100 - length=142 - nb_segs=1 - hw ptype: L2_ETHER L3_IPV6_EXT_UNKNOWN L4_NONFRAG - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN INNER_L3_IPV6 - l2_len=18 - inner_l2_len=4 - inner_l3_len=40 - Receive queue=0x0 + ol_flags: RTE_MBUF_F_RX_L4_CKSUM_GOOD RTE_MBUF_F_RX_IP_CKSUM_GOOD RTE_MBUF_F_RX_OUTER_L4_CKSUM_UNKNOWN + +4. Send mismatched packet in scapy on tester, check the port 1 of DUT could not receive this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:33",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x2,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/("X"*80)],iface="ens260f0",count=1) + +5. Destroy a rule and list rules:: + + testpmd> flow destroy 0 rule 0 + + Get the message:: + + Flow rule #0 destroyed + + Check the flow list:: + + testpmd> flow list 0 + + Check the rule not exists in the list. + Send matched packets in step 3, check the packets are not to port 1. + +Test Case 3: MAC_QINQ_IPV4_UDP +------------------------------ +The test case enable QINQ switch filter for IPv4 + UDP in non-pipeline mode, and port can support as dst MAC + outer VLAN id + inner VLAN id + IPv4 + UDP. + +Test steps +~~~~~~~~~~ +1. Validate a rule:: + + testpmd> flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv4 / udp src is 50 dst is 23 / end actions vf id 1 / end + + Get the message:: + + Flow rule validated + +2. Create a rule and list rules:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv4 / udp src is 50 dst is 23 / end actions vf id 1 / end + + Get the message:: + + Flow rule #0 created + + Check the flow list:: + + testpmd> flow list 0 + + ID Group Prio Attr Rule + 0 0 0 i-- ETH VLAN VLAN IPV4 UDP => VF + +3. Send matched packet in scapy on tester, check the port 1 of DUT received this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP()/UDP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + +DUT:: + + testpmd> port 1/queue 0: received 1 packets + src=00:00:00:00:00:00 - dst=00:11:22:33:44:55 - type=0x8100 - length=130 - nb_segs=1 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_UDP - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN INNER_L3_IPV4 INNER_L4_UDP - l2_len=18 - inner_l2_len=4 - inner_l3_len=20 - inner_l4_len=8 - Receive queue=0x0 + ol_flags: RTE_MBUF_F_RX_L4_CKSUM_GOOD RTE_MBUF_F_RX_IP_CKSUM_GOOD RTE_MBUF_F_RX_OUTER_L4_CKSUM_UNKNOWN + +4. Send mismatched packet in scapy on tester, check the port 1 of DUT could not receive this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:33",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP()/UDP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP()/UDP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x2,type=0x0800)/IP()/UDP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP()/UDP(sport=50,dport=22)/("X"*80)],iface="ens260f0",count=1) + +5. Destroy a rule and list rules:: + + testpmd> flow destroy 0 rule 0 + + Get the message:: + + Flow rule #0 destroyed + + Check the flow list:: + + testpmd> flow list 0 + + Check the rule not exists in the list. + Send matched packets in step 3, check the packets are not to port 1. + +Test Case 4: MAC_QINQ_IPV4_TCP +------------------------------ +The test case enable QINQ switch filter for IPv4 + TCP in non-pipeline mode, and port can support as dst MAC + outer VLAN id + inner VLAN id + IPv4 + TCP. + +Test Steps +~~~~~~~~~~ +1. Validate a rule:: + + testpmd> flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv4 / tcp src is 50 dst is 23 / end actions vf id 1 / end + + Get the message:: + + Flow rule validated + +2. Create a rule and list rules:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv4 / tcp src is 50 dst is 23 / end actions vf id 1 / end + + Get the message:: + + Flow rule #0 created + + Check the flow list:: + + testpmd> flow list 0 + + ID Group Prio Attr Rule + 0 0 0 i-- ETH VLAN VLAN IPV4 TCP => VF + +3. Send matched packet in scapy on tester, check the port 1 of DUT received this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP()/TCP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + +DUT:: + + testpmd> port 1/queue 0: received 1 packets + src=00:00:00:00:00:00 - dst=00:11:22:33:44:55 - type=0x8100 - length=142 - nb_segs=1 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_TCP - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN INNER_L3_IPV4 INNER_L4_TCP - l2_len=18 - inner_l2_len=4 - inner_l3_len=20 - inner_l4_len=20 - Receive queue=0x0 + ol_flags: RTE_MBUF_F_RX_L4_CKSUM_GOOD RTE_MBUF_F_RX_IP_CKSUM_GOOD RTE_MBUF_F_RX_OUTER_L4_CKSUM_UNKNOWN + +4. Send mismatched packet in scapy on tester, check the port 1 of DUT could not receive this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:33",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP()/TCP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP()/TCP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x2,type=0x0800)/IP()/TCP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x0800)/IP()/TCP(sport=50,dport=22)/("X"*80)],iface="ens260f0",count=1) + +5. Destroy a rule and list rules:: + + testpmd> flow destroy 0 rule 0 + + Get the message:: + + Flow rule #0 destroyed + + Check the flow list:: + + testpmd> flow list 0 + + Check the rule not exists in the list. + Send matched packets in step 3, check the packets are not to port 1. + +#Pipeline mode + +Test Case 5: MAC_QINQ_IPV6_UDP +------------------------------ +The test case enable QINQ switch filter for IPv6 + UDP in pipeline mode, and port can support as dst MAC + outer VLAN id + inner VLAN id + IPv6 + UDP. + +Test Steps +~~~~~~~~~~ +1. Validate a rule:: + + testpmd> flow validate 0 priority 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / udp src is 50 dst is 23 / end actions vf id 1 / end + + Get the message:: + + Flow rule validated + +2. Create a rule and list rules:: + + testpmd> flow create 0 priority 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / udp src is 50 dst is 23 / end actions vf id 1 / end + + Get the message:: + + Flow rule #0 created + + Check the flow list:: + + testpmd> flow list 0 + + ID Group Prio Attr Rule + 0 0 0 i-- ETH VLAN VLAN IPV6 UDP => VF + +3. Send matched packet in scapy on tester, check the port 1 of DUT received this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + +DUT:: + + testpmd> port 1/queue 0: received 1 packets + src=00:00:00:00:00:00 - dst=00:11:22:33:44:55 - type=0x8100 - length=150 - nb_segs=1 - hw ptype: L2_ETHER L3_IPV6_EXT_UNKNOWN L4_UDP - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN INNER_L3_IPV6 INNER_L4_UDP - l2_len=18 - inner_l2_len=4 - inner_l3_len=40 - inner_l4_len=8 - Receive queue=0x0 + ol_flags: RTE_MBUF_F_RX_L4_CKSUM_GOOD RTE_MBUF_F_RX_IP_CKSUM_GOOD RTE_MBUF_F_RX_OUTER_L4_CKSUM_UNKNOWN + +4. Send mismatched packet in scapy on tester, check the port 1 of DUT could not receive this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:33",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x2,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=50,dport=22)/("X"*80)],iface="ens260f0",count=1) + +5. Destroy a rule and list rules:: + + testpmd> flow destroy 0 rule 0 + + Get the message:: + + Flow rule #0 destroyed + + Check the flow list:: + + testpmd> flow list 0 + + Check the rule not exists in the list. + Send matched packets in step 3, check the packets are not to port 1. + +Test case 6: MAC_QINQ_IPV6_TCP +------------------------------ +The test case enable QINQ switch filter for IPv6 + TCP in pipeline mode, and port can support as dst MAC + outer VLAN id + inner VLAN id + IPv6 + TCP. + +Test steps +~~~~~~~~~~ +1. Validate a rule:: + + testpmd> flow validate 0 priority 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / tcp src is 50 dst is 23 / end actions vf id 1 / end + + Get the message:: + + Flow rule validated + +2. Create a rule and list rules:: + + testpmd> flow create 0 priority 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 2 / vlan tci is 1 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / tcp src is 50 dst is 23 / end actions vf id 1 / end + + Get the message:: + + Flow rule #0 created + + Check the flow list:: + + testpmd> flow list 0 + + ID Group Prio Attr Rule + 0 0 0 i-- ETH VLAN VLAN IPV6 TCP => VF + +3. Send matched packet in scapy on tester, check the port 1 of DUT received this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + +DUT:: + + testpmd> port 1/queue 0: received 1 packets + src=00:00:00:00:00:00 - dst=00:11:22:33:44:55 - type=0x8100 - length=162 - nb_segs=1 - hw ptype: L2_ETHER L3_IPV6_EXT_UNKNOWN L4_TCP - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN INNER_L3_IPV6 INNER_L4_TCP - l2_len=18 - inner_l2_len=4 - inner_l3_len=40 - inner_l4_len=20 - Receive queue=0x0 + ol_flags: RTE_MBUF_F_RX_L4_CKSUM_GOOD RTE_MBUF_F_RX_IP_CKSUM_GOOD RTE_MBUF_F_RX_OUTER_L4_CKSUM_UNKNOWN + +4. Send mismatched packet in scapy on tester, check the port 1 of DUT could not receive this packet. + +Tester:: + + >>> sendp([Ether(dst="00:11:22:33:44:33",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x2,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=50,dport=23)/("X"*80)],iface="ens260f0",count=1) + + >>> sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x8100)/Dot1Q(vlan=0x1,type=0x86DD)/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=50,dport=22)/("X"*80)],iface="ens260f0",count=1) + +5. Destroy a rule and list rules:: + + testpmd> flow destroy 0 rule 0 + + Get the message:: + + Flow rule #0 destroyed + + Check the flow list:: + + testpmd> flow list 0 + + Check the rule not exists in the list. + Send matched packets in step 3, check the packets are not to port 1. +