test suite reviews and discussions
 help / color / mirror / Atom feed
From: qifu <qi.fu@intel.com>
To: dts@dpdk.org
Cc: qifu <qi.fu@intel.com>
Subject: [dts][PATCH V1]test_plans: add test plan for cvl flow priority
Date: Mon, 10 Jan 2022 22:12:43 +0800
Message-ID: <20220110141243.713106-1-qi.fu@intel.com> (raw)

add test plan for cvl PF flow priority.

Signed-off-by: qifu <qi.fu@intel.com>
---
 test_plans/cvl_flow_priority_test_plan.rst | 757 +++++++++++++++++++++
 test_plans/index.rst                       |   1 +
 2 files changed, 758 insertions(+)
 create mode 100644 test_plans/cvl_flow_priority_test_plan.rst

diff --git a/test_plans/cvl_flow_priority_test_plan.rst b/test_plans/cvl_flow_priority_test_plan.rst
new file mode 100644
index 00000000..f0f947ea
--- /dev/null
+++ b/test_plans/cvl_flow_priority_test_plan.rst
@@ -0,0 +1,757 @@
+.. Copyright (c) <2021>, Intel Corporation\r
+   All rights reserved.\r
+\r
+   Redistribution and use in source and binary forms, with or without\r
+   modification, are permitted provided that the following conditions\r
+   are met:\r
+\r
+   - Redistributions of source code must retain the above copyright\r
+     notice, this list of conditions and the following disclaimer.\r
+\r
+   - Redistributions in binary form must reproduce the above copyright\r
+     notice, this list of conditions and the following disclaimer in\r
+     the documentation and/or other materials provided with the\r
+     distribution.\r
+\r
+   - Neither the name of Intel Corporation nor the names of its\r
+     contributors may be used to endorse or promote products derived\r
+     from this software without specific prior written permission.\r
+\r
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r
+   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r
+   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
+   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
+   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r
+   OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+===============================\r
+CVL Support Flow Priority in PF\r
+===============================\r
+\r
+Description\r
+===========\r
+In CVL PF rte_flow distribution mode(non-pipeline mode), a flow with priority = 1 will be programmed into switch filter,\r
+a flow with priority = 0 will be programmed into switch first then fdir. \r
+Currently only support priority 0 and 1. 1 means low priority and 0 means high priority.\r
+When looking up rule table, matched pkt will hit the high priority rule firstly,\r
+it will hit the low priority rule only when there is no high priority rule exist.\r
+\r
+\r
+Prerequisites\r
+=============\r
+\r
+Topology\r
+--------\r
+1node/1nic/2port/fwd\r
+2node/1nic/1port/loopback\r
+\r
+Hardware\r
+--------\r
+Supportted NICs: columbiaville_25g/columbiaville_100g\r
+\r
+Software\r
+--------\r
+DPDK: http://dpdk.org/git/dpdk\r
+Scapy: http://www.secdev.org/projects/scapy/\r
+\r
+General Set Up\r
+--------------\r
+1. Compile DPDK::\r
+\r
+    # CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib --default-library=static <dpdk build dir>\r
+    # ninja -C <dpdk build dir> -j 110\r
+\r
+2. Get the pci device id and interface of DUT and tester. \r
+   For example, 0000:18:00.0 and 0000:18:00.1 is pci device id,\r
+   ens785f0 and ens785f1 is interface::\r
+\r
+    <dpdk dir># ./usertools/dpdk-devbind.py -s\r
+\r
+    0000:18:00.0 'Device 159b' if=ens785f0 drv=ice unused=vfio-pci\r
+    0000:18:00.1 'Device 159b' if=ens785f1 drv=ice unused=vfio-pci\r
+\r
+3. Bind the DUT port to dpdk::\r
+\r
+    <dpdk dir># ./usertools/dpdk-devbind.py -b vfio-pci <DUT port pci device id>\r
+\r
+4. Launch the userland ``testpmd`` application on DUT as follows and ::\r
+\r
+    <dpdk build dir>/app/dpdk-testpmd <EAL options> -- -i --rxq=<queue number> --txq=<queue number>\r
+    testpmd> set fwd rxonly\r
+    testpmd> set verbose 1\r
+    testpmd> rx_vxlan_port add 4789 0\r
+    testpmd> start\r
+\r
+..note:: \r
+\r
+    For <EAL options>, you can use "-c 0xf -n 1", you can also refer to testpmd doc for other setings.\r
+\r
+\r
+Test Case\r
+=========\r
+\r
+Common Steps\r
+------------\r
+1. validate rules: two rules have same pattern, input set but different priority and actions.\r
+2. create rules and list rules.\r
+3. send matched packets, check the action hiting the rule with priority 0.\r
+4. send mismatched packets, check the packets will not hit any rules.\r
+5. destroy rule with priority 0, list rules.\r
+6. send matched packets, check the action hiting the rule with priority 1.\r
+7. send mismatched packets, check the packets will not hit any rules.\r
+8. recreate rules which priority is 0, list rule.\r
+9. destroy rule with priority 1, list rules.\r
+10. send matched packets, check the action hiting the rule with priority 0.\r
+11. send mismatched packets, check the packets will not hit any rules.\r
+12. destroy rule with priority 0, list rules.\r
+13. send matched packets, check the packets will not hit any rules.\r
+\r
+All the packets in this test plan use below settings:\r
+dst mac: 68:05:ca:8d:ed:a8\r
+dst mac change inputset: 68:05:ca:8d:ed:a3\r
+ipv4 src: 192.168.0.1\r
+ipv4 dst: 192.168.0.2\r
+ipv4 src change inputset: 192.168.0.3\r
+ipv4 dst change inputset: 192.168.0.4\r
+inner ipv4 src: 192.168.1.1\r
+inner ipv4 src change inputset: 192.168.1.2\r
+inner ipv4 dst: 192.168.1.3\r
+inner ipv4 dst change inputset: 192.168.1.4\r
+ipv6 src: CDCD:910A:2222:5498:8475:1111:3900:1536\r
+ipv6 dst: CDCD:910A:2222:5498:8475:1111:3900:2020\r
+ipv6 src change inputset: CDCD:910A:2222:5498:8475:1111:3900:1538\r
+ipv6 dst change inputset: CDCD:910A:2222:5498:8475:1111:3900:2028\r
+tos: 4\r
+tos change inputset: 5\r
+ttl: 2\r
+ttl change inputset: 9\r
+sport: 23\r
+sport change inputset: 33\r
+dport: 24\r
+dport change inputset: 34\r
+tc: 3\r
+tc change inputset: 7\r
+tni: 0x8\r
+tni change inputset: 0x1\r
+ethertype: 0x8863\r
+ethertype change inputset: 0x8864\r
+tci: 1\r
+tci change inputset: 2\r
+seid: 3\r
+seid change inputset: 4\r
+ipv4 proto_id: 0x0021\r
+ipv6 proto_id: 0x0057\r
+LCP proto_id: 0xc021\r
+IPCP proto_id: 0x8021\r
+\r
+Support Pattern and Input Set\r
+-----------------------------\r
+.. table::\r
+\r
+    +---------------------+-------------------------------+-------------------------------------------+\r
+    |    Packet Types     |           Pattern             | input set (non-pipeline mode)             |\r
+    +=====================+===============================+===========================================+\r
+    |                     | MAC_IPV4_FRAG                 |  N/A         				                      |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV4_PAY                  | [Source IP], [Dest IP],[TOS],[TTL]        |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV4_UDP_PAY              | [Source IP], [Dest IP],[TOS],[TTL],       |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    | IPv4/IPv6 + TCP/UDP | MAC_IPV4_TCP                  | [Source IP], [Dest IP],[TOS],[TTL],       |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV6                      | [Source IP], [Dest IP]                    |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV6_UDP_PAY              | [Source IP], [Dest IP],[TOS],[TTL],       |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV6_TCP                  | [Source IP], [Dest IP],[TOS],[TTL],       |\r
+    +---------------------+-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV4_TUN_IPV4_FRAG        | [Out Dest IP], [VNI/GRE_KEY],             |\r
+    |                     |                               | [Inner Source IP], [Inner Dest IP]        |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV4_TUN_IPV4_PAY         | [Out Dest IP], [VNI/GRE_KEY],             |\r
+    |                     |                               | [Inner Source IP], [Inner Dest IP]        |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV4_TUN_IPV4_UDP_PAY     | [Out Dest IP], [VNI/GRE_KEY],             |\r
+    |                     |                               | [Inner Source IP], [Inner Dest IP],       |\r
+    |                     |                               | [Inner Source Port], [Inner Dest Port]    |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV4_TUN_IPV4_TCP         | [Out Dest IP], [VNI/GRE_KEY],             |\r
+    |                     |                               | [Inner Source IP], [Inner Dest IP],       |\r
+    |                     |                               | [Inner Source Port], [Inner Dest Port]    |\r
+    |        tunnel       +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV4_TUN_MAC_IPV4_FRAG    | [Out Dest IP], [VNI/GRE_KEY],             |\r
+    |                     |                               | [Inner Dest MAC],                         |\r
+    |                     |                               | [Inner Source IP], [Inner Dest IP]        |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV4_TUN_MAC_IPV4_PAY     | [Out Dest IP], [VNI/GRE_KEY],             |\r
+    |                     |                               | [Inner Dest MAC],                         |\r
+    |                     |                               | [Inner Source IP], [Inner Dest IP]        |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV4_TUN_MAC_IPV4_UDP_PAY	| [Out Dest IP], [VNI/GRE_KEY],             |\r
+    |                     |                               | [Inner Dest MAC],                         |\r
+    |                     |                               | [Inner Source IP],[Inner Dest IP],        |\r
+    |                     |                               | [Inner Source Port], [Inner Dest Port]    |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_IPV4_TUN_MAC_IPV4_TCP     | [Out Dest IP], [VNI/GRE_KEY],             |\r
+    |                     |                               | [Inner Dest MAC],                         |\r
+    |                     |                               | [Inner Source IP], [Inner Dest IP],       |\r
+    |                     |                               | [Inner Source Port], [Inner Dest Port]    |\r
+    +---------------------+-------------------------------+-------------------------------------------+\r
+    |  ethertype filter   | ethertype filter_PPPOED       | [Ether type]                              |\r
+    +---------------------+-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPV4_PAY       | [Dest MAC], [VLAN], [seid],               |\r
+    |                     | _session_id_proto_id          | [pppoe_proto_id]                          |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                	    | MAC_VLAN_PPPOE_IPV6_PAY       | [Dest MAC], [VLAN], [seid],               |\r
+    |                     | _session_id_proto_id          | [pppoe_proto_id]                          |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV4_PAY_session_id | [Dest MAC], [seid], [pppoe_proto_id]      |\r
+    |                     | _proto_id                     |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV6_PAY_session_id | [Dest MAC], [seid], [pppoe_proto_id]      |\r
+    |                     | _proto_id                     |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV4_PAY_IP_address | [Source IP], [Dest IP]                    |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV4_UDP_PAY        | [Source IP], [Dest IP],                   |\r
+    |                     |                               | [Source Port], [Dest Port]                |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV4_UDP_PAY        | [Source IP], [Dest IP]                    |\r
+    |                     | _non_src_dst_port             |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV4_TCP_PAY        | [Source IP], [Dest IP],                   |\r
+    |                     |                               | [Source Port], [Dest Port]                |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV4_TCP_PAY        | [Source IP], [Dest IP]                    |\r
+    |                     | _non_src_dst_port             |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV6_PAY_IP_address | [Source IP], [Dest IP]                    |\r
+    |      PPPOES         +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV6_UDP_PAY        | [Source IP], [Dest IP],                   |\r
+    |                     |                               | [Source Port], [Dest Port]                |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV6_UDP_PAY        | [Source IP], [Dest IP]                    |\r
+    |                     | _non_src_dst_port             |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV6_TCP_PAY        | [Source IP], [Dest IP],                   |\r
+    |                     |                               | [Source Port], [Dest Port]                |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPV6_TCP_PAY        | [Source IP], [Dest IP],                   |\r
+    |                     | _non_src_dst_port             |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPV4_PAY       | [VLAN], [Source IP], [Dest IP]            |\r
+    |                     | _IP_address                   |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPV4_UDP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r
+    |                     |                               | [Source Port], [Dest Port]                |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPV4_UDP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r
+    |                     | _non_src_dst_port             |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPV4_TCP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r
+    |                     |                               | [Source Port], [Dest Port]                |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPV4_TCP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r
+    |                     | _non_src_dst_port             |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPV6_PAY       | [VLAN], [Source IP], [Dest IP]            |\r
+    |                     | _IP_address                   |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPV6_UDP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r
+    |                     |                               | [Source Port], [Dest Port]                |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPV6_UDP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r
+    |                     | _non_src_dst_port             |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPV6_TCP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r
+    |                     |                               | [Source Port], [Dest Port]                |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPV6_TCP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r
+    |                     | _non_src_dst_port             |                                           |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_LCP_PAY             | [Dest MAC], [seid], [pppoe_proto_id]      |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_PPPOE_IPCP_PAY            | [Dest MAC], [seid], [pppoe_proto_id]      |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_LCP_PAY        | [Dest MAC], [VLAN], [seid],               |\r
+    |                     |                               | [pppoe_proto_id]                          |\r
+    |                     +-------------------------------+-------------------------------------------+\r
+    |                     | MAC_VLAN_PPPOE_IPCP_PAY       | [Dest MAC], [VLAN], [seid],               |\r
+    |                     |                               | [pppoe_proto_id]                          |\r
+    +---------------------+-------------------------------+-------------------------------------------+\r
+\r
+..note::\r
+\r
+    the basic switch function of supported pattern is covered by cvl_switch_filter_test_plan.rst and cvl_switch_filter_pppoe_test_plan.rst.\r
+    this test plan is designed to check the flow priority in switch, so we only select some patterns not all matrix in test plan.\r
+\r
+\r
+Test Case 1: MAC_IPV4_PAY\r
+-------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / ipv4 src is <ipv4 src> dst is <ipv4 dst> tos is <tos> ttl is <ttl> / end actions queue index 1 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / ipv4 src is <ipv4 src> dst is <ipv4 dst> tos is <tos> ttl is <ttl> / end actions queue index 4 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>")/IP(src="<ipv4 src>",dst="<ipv4 dst>",tos=<tos>,ttl=<ttl>)/("X"*480)], iface="<tester interface>")\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac change inputset>")/IP(src="<ipv4 src>",dst="<ipv4 dst>",tos=<tos>,ttl=<ttl>)/("X"*480)], iface="<tester interface>")\r
+  >>> sendp([Ether(dst="<dst mac>")/IP(src="<ipv4 src change inputset>",dst="<ipv4 dst>",tos=<tos>,ttl=<ttl>)/("X"*480)], iface="<tester interface>")\r
+  >>> sendp([Ether(dst="<dst mac>")/IP(src="<ipv4 src>",dst="<ipv4 dst change inputset>",tos=<tos>,ttl=<ttl>)/("X"*480)], iface="<tester interface>")\r
+  >>> sendp([Ether(dst="<dst mac>")/IP(src="<ipv4 src>",dst="<ipv4 dst>",tos=<tos change inputset>,ttl=<ttl>)/("X"*480)], iface="<tester interface>")\r
+  >>> sendp([Ether(dst="<dst mac>")/IP(src="<ipv4 src>",dst="<ipv4 dst>",tos=<tos>,ttl=<ttl change inputset>)/("X"*480)], iface="<tester interface>")\r
+\r
+\r
+Test Case 2: MAC_IPV4_UDP_PAY\r
+-----------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> tos is <tos> / udp src is <sport> dst is <dport> / end actions rss queues 4 5 end / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> tos is <tos> / udp src is <sport> dst is <dport> / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether()/IP(src="<ipv4 src>",dst="<ipv4 dst>",tos=<tos>)/UDP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether()/IP(src="<ipv4 src change inputset>",dst="<ipv4 dst>",tos=<tos>)/UDP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>")\r
+  >>> sendp([Ether()/IP(src="<ipv4 src>",dst="<ipv4 dst change inputset>",tos=<tos>)/UDP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>")\r
+  >>> sendp([Ether()/IP(src="<ipv4 src>",dst="<ipv4 dst>",tos=<tos change inputset>)/UDP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>")\r
+  >>> sendp([Ether()/IP(src="<ipv4 src>",dst="<ipv4 dst>",tos=<tos>)/UDP(sport=<sport change inputset>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>")\r
+  >>> sendp([Ether()/IP(src="<ipv4 src>",dst="<ipv4 dst>",tos=<tos>)/UDP(sport=<sport>,dport=<dport change inputset>)/Raw("x"*80)],iface="<tester interface>")\r
+\r
+\r
+Test Case 3: MAC_IPV6_PAY\r
+-------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 src is <ipv6 src> dst is <ipv6 dst> / end actions rss queues 4 5 end / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv6 src is <ipv6 src> dst is <ipv6 dst> / end actions queue index 8 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether()/IPv6(src="<ipv6 src>", dst="<ipv6 dst>")/("X"*480)], iface="<tester interface>")\r
+  >>> sendp([Ether()/IPv6(src="<ipv6 src>", dst="<ipv6 dst>")/IPv6ExtHdrFragment()/("X"*480)], iface="<tester interface>")\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether()/IPv6(src="<ipv6 src change inputset>", dst="<ipv6 dst>")/("X"*480)], iface="<tester interface>")\r
+  >>> sendp([Ether()/IPv6(src="<ipv6 src>", dst="<ipv6 dst change inputset>")/("X"*480)], iface="<tester interface>")\r
+  >>> sendp([Ether()/IPv6(src="<ipv6 src change inputset>", dst="<ipv6 dst>")/IPv6ExtHdrFragment()/("X"*480)], iface="<tester interface>")\r
+  >>> sendp([Ether()/IPv6(src="<ipv6 src>", dst="<ipv6 dst change inputset>")/IPv6ExtHdrFragment()/("X"*480)], iface="<tester interface>")\r
+\r
+\r
+Test Case 4: MAC_IPV6_TCP\r
+-------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is <ipv6 dst> tc is <tc> / tcp src is <sport> dst is <dport> / end actions rss queues 4 5 end / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv6 dst is <ipv6 dst> tc is <tc> / tcp src is <sport> dst is <dport> / end actions queue index 3 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether()/IPv6(src="<ipv6 src>",dst="<ipv6 dst>",tc=<tc>)/TCP(sport=<sport>,dport=23)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether()/IPv6(src="<ipv6 src>",dst="<ipv6 dst change inputset>",tc=<tc>)/TCP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IPv6(src="<ipv6 src>",dst="<ipv6 dst>",tc=<tc change inputset>)/TCP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IPv6(src="<ipv6 src>",dst="<ipv6 dst>",tc=<tc>)/TCP(sport=<sport change inputset>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IPv6(src="<ipv6 src>",dst="<ipv6 dst>",tc=<tc>)/TCP(sport=<sport>,dport=<dport change inputset>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 5: MAC_IPV4_VXLAN_IPV4_FRAG\r
+-------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions rss queues 2 3 end / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 5 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src>", dst="<ipv4 dst>",frag=5)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src change inputset>", dst="<ipv4 dst>",frag=5)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src>", dst="<ipv4 dst change inputset>",frag=5)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src>", dst="<ipv4 dst>",frag=5)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 6: MAC_IPV4_VXLAN_IPV4_PAY\r
+------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 5 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions rss queues 2 3 end / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src>", dst="<ipv4 dst>")/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src>", dst="<ipv4 dst>")/TCP()/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src change inputset>", dst="<ipv4 dst>")/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src>", dst="<ipv4 dst change inputset>")/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src>", dst="<ipv4 dst>")/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src>", dst="<ipv4 dst>")/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src change inputset>", dst="<ipv4 dst>")/TCP()/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src>", dst="<ipv4 dst change inputset>")/TCP()/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src="<ipv4 src>", dst="<ipv4 dst>")/TCP()/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 7: MAC_IPV4_NVGRE_MAC_IPV4_UDP_PAY\r
+--------------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 dst is <ipv4 dst> / nvgre tni is <tni> / eth dst is <dst mac> / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / udp src is <sport> dst is <dport> / end actions rss queues 2 3 end / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 dst is <ipv4 dst> / nvgre tni is <tni> / eth dst is <dst mac> / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / udp src is <sport> dst is <dport> / end actions queue index 4 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst>")/UDP(sport=<sport>,dport=<dport>)/Raw("x"*80)], iface="<tester interface>", count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst change inputset>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst>")/UDP(sport=<sport>,dport=<dport>)/Raw("x"*80)], iface="<tester interface>", count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni change inputset>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst>")/UDP(sport=<sport>,dport=<dport>)/Raw("x"*80)], iface="<tester interface>", count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac change inputset>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst>")/UDP(sport=<sport>,dport=<dport>)/Raw("x"*80)], iface="<tester interface>", count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src change inputset>", dst="<inner ipv4 dst>")/UDP(sport=<sport>,dport=<dport>)/Raw("x"*80)], iface="<tester interface>", count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst change inputset>")/UDP(sport=<sport>,dport=<dport>)/Raw("x"*80)], iface="<tester interface>", count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst>")/UDP(sport=<sport change inputset>,dport=<dport>)/Raw("x"*80)], iface="<tester interface>", count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst>")/UDP(sport=<sport>,dport=<dport change inputset>)/Raw("x"*80)], iface="<tester interface>", count=1)\r
+\r
+\r
+Test Case 8: MAC_IPV4_NVGRE_MAC_IPV4_TCP\r
+----------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 dst is <ipv4 dst> / nvgre tni is <tni> / eth dst is <dst mac>  / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / tcp src is <sport> dst is <dport> / end actions queue index 5 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 dst is <ipv4 dst> / nvgre tni is <tni> / eth dst is <dst mac>  / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / tcp src is <sport> dst is <dport> / end actions rss queues 2 3 end / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst>")/TCP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst change inputset>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst>")/TCP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni change inputset>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst>")/TCP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac change inputset>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst>")/TCP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src change inputset>", dst="<inner ipv4 dst>")/TCP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst change inputset>")/TCP(sport=<sport>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>", dst="<inner ipv4 dst>")/TCP(sport=<sport change inputset>,dport=<dport>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether()/IP(dst="<ipv4 dst>")/NVGRE(TNI=<tni>)/Ether(dst="<dst mac>")/IP(src="<inner ipv4 src>2", dst="<inner ipv4 dst>")/TCP(sport=<sport>,dport=<dport change inputset>)/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 9: ethertype filter_PPPOED\r
+------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth type is <ethertype> / end actions queue index 4 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth type is <ethertype> / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>", type=<ethertype>)/Raw("x" *80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>")/PPPoED()/Raw("x" *80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>", type=<ethertype change inputset>)/Raw("x" *80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>")/PPPoE()/Raw("x" *80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 10: MAC_VLAN_PPPOE_IPV4_PAY_session_id_proto_id\r
+---------------------------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv4 proto_id> / end actions queue index 1 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv4 proto_id> / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<proto_id>)/IP()/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac change inputset>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 11: MAC_VLAN_PPPOE_IPV6_PAY_session_id_proto_id\r
+---------------------------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv6 proto_id> / end actions queue index 1 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv6 proto_id> / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac change inputset>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<ipv6 proto_id>)/IPv6()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 12: MAC_PPPOE_IPV4_PAY_IP_address\r
+-------------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / pppoes / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 1 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / pppoes / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="<ipv4 src>", dst="<ipv4 dst>")/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="<ipv4 src change inputset>", dst="<ipv4 dst>")/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="<ipv4 src>", dst="<ipv4 dst change inputset>")/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 13: MAC_PPPOE_IPV6_UDP_PAY\r
+------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / pppoes / ipv6 dst is <ipv6 dst> / udp src is <sport> dst is <dport> / end actions queue index 1 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / pppoes / ipv6 dst is <ipv6 dst> / udp src is <sport> dst is <dport> / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src="<ipv6 src>", dst="<ipv6 dst>")/UDP(sport=<sport>,dport=<dport>)/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src="<ipv6 src>", dst="<ipv6 dst change inputset>")/UDP(sport=<sport>,dport=<dport>)/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src="<ipv6 src>", dst="<ipv6 dst>")/UDP(sport=<sport change inputset>,dport=<dport>)/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src="<ipv6 src>", dst="<ipv6 dst>")/UDP(sport=<sport>,dport=<dport change inputset>)/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 14: MAC_VLAN_PPPOE_IPV4_TCP_PAY_non_src_dst_port\r
+----------------------------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / vlan tci is <tci> / pppoes / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp / end actions queue index 1 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / vlan tci is <tci> / pppoes / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src="<ipv4 src>", dst="<ipv4 dst>")/TCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src="<ipv4 src>", dst="<ipv4 dst>")/TCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src="<ipv4 src change inputset>", dst="<ipv4 dst>")/TCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src="<ipv4 src>", dst="<ipv4 dst change inputset>")/TCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src="<ipv4 src>", dst="<ipv4 dst>")/UDP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src="<ipv4 src>", dst="<ipv4 dst>")/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 15: MAC_VLAN_PPPOE_IPV6_PAY_IP_address\r
+------------------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / vlan tci is <tci> / pppoes / ipv6 src is <ipv6 src> / end actions queue index 1 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / vlan tci is <tci> / pppoes / ipv6 src is <ipv6 src> / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src="<ipv6 src>", dst="<ipv6 dst>")/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src="<ipv6 src>", dst="<ipv6 dst>")/Raw("x"*80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src="<ipv6 src change inputset>", dst="<ipv6 dst>")/Raw("x"*80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 16: MAC_PPPOE_LCP_PAY\r
+-------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / pppoes seid is <seid> / pppoe_proto_id is <LCP proto_id> / end actions queue index 1 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / pppoes seid is <seid> / pppoe_proto_id is <LCP proto_id> / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac change inputset>",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 17: MAC_PPPOE_IPCP_PAY\r
+--------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / pppoes seid is <seid> / pppoe_proto_id is <IPCP proto_id> / end actions queue index 1 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / pppoes seid is <seid> / pppoe_proto_id is <IPCP proto_id> / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac change inputset>",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 18: MAC_VLAN_PPPOE_LCP_PAY\r
+------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <LCP proto_id> / end actions queue index 1 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <LCP proto_id> / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac change inputset>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 19: MAC_VLAN_PPPOE_IPCP_PAY\r
+-------------------------------------\r
+rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <IPCP proto_id> / end actions queue index 1 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <IPCP proto_id> / end actions queue index 2 / end\r
+\r
+matched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+mismatched packets::\r
+\r
+  >>> sendp([Ether(dst="<dst mac change inputset>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+  >>> sendp([Ether(dst="<dst mac>",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw("x" * 80)],iface="<tester interface>",count=1)\r
+\r
+\r
+Test Case 20: check flow priority filter\r
+----------------------------------------\r
+1. launch testpmd with --log-level="ice,8"\r
+\r
+2. create rules with priority 0, check the rule is created to switch with a log "Succeeded to create (2) flow"::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 dst is <ipv4 src> / nvgre tni is <tni> / eth / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / end actions queue index 3 / end\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp src is <sport> dst is <dport> / end actions rss queues 4 5 end / end\r
+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv6 proto_id> / end actions drop / end\r
+\r
+3. create rules with priority 0, and the action is mark, check the rule is created to fdir with a log "Succeeded to create (1) flow"::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp src is <sport> dst is <dport> / end actions rss queues 4 5 end / mark id 3 / end\r
+\r
+4. create rules with priority 1, check the rule is created to switch with a log "Succeeded to create (2) flow"::\r
+\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp src is <sport> dst is <dport> / end actions rss queues 4 5 end / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv6 proto_id> / end actions drop / end\r
+\r
+5. create rules with priority 1, and the action is mark, check the rule create fail::\r
+\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 dst is <ipv4 src> / nvgre tni is <tni> / eth / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / end actions queue index 3 / mark id 3 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp src is <sport> dst is <dport> / end actions rss queues 4 5 end / mark id 3 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv6 proto_id> / end actions drop / mark id 3 / end\r
+\r
+\r
+Test Case 21: negative test cases\r
+---------------------------------\r
+1. create rules, check all these rules can not be created::\r
+\r
+    testpmd> flow create 0 priority 2 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 3 / end\r
+    testpmd> flow create 0 priority a ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 3 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions mark / rss / end\r
+\r
+\r
+Test Case 22: exclusive test cases\r
+----------------------------------\r
+Subcase 1: same pattern/input set/action different priority\r
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
+1. create same pattern, input set and action but different priority, check these two rules can be created::\r
+\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 3 / end\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 3 / end\r
+\r
+2. send matched pkts and check queue 3 receive this pkt::\r
+\r
+    >>> sendp([Ether(dst="<dst mac>")/IP(src="<ipv4 src>",dst="<ipv4 dst>")/TCP()/("X"*480)], iface="<tester interface>", count=1)\r
+\r
+3. destroy rules::\r
+\r
+    flow flush 0\r
+\r
+Subcase 2: same pattern/input set/priority different action\r
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
+1. create same pattern, input set and priority but different action, check the second rule can not be created::\r
+\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 3 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions rss queues 4 5 end / end\r
+\r
+Subcase 3: some rules overlap\r
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
+1. create rules::\r
+\r
+    testpmd> flow create 0 priority 0 ingress pattern eth / vlan / vlan / pppoes / pppoe_proto_id is 0x21 / end actions queue index 3 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / vlan / vlan / pppoes seid is 1 / ipv4 / end actions queue index 2 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / vlan / vlan tci is 12 / end actions queue index 4 / end\r
+    testpmd> flow create 0 priority 0 ingress pattern eth dst is 00:00:00:01:03:13 / vlan / vlan / end actions rss queues 1 2 end / end\r
+    testpmd> flow create 0 priority 0 ingress pattern eth dst is 00:00:00:01:03:03 / end actions queue index 8 / end\r
+    testpmd> flow create 0 priority 1 ingress pattern eth / vlan tci is 1 / vlan tci is 2 / end actions queue index 4 / end\r
+\r
+2. check all the rules exist in the list::\r
+\r
+    flow list 0\r
+\r
+3. send pkt which match rule 0 and rule 1, check the pkt can be received by queue 3::\r
+\r
+    >>> sendp([Ether(type=0x8100)/Dot1Q(vlan=1,type=0x8100)/Dot1Q(vlan=0x2,type=0x8864)/PPPoE(sessionid=0x1)/PPP(proto=0x21)/IP()/UDP(dport=23)/("X"*480)], iface="<tester interface>")\r
+\r
+4. destroy rule 0, repeat step 3 and check the pkt can be received by queue 2::\r
+\r
+    flow destroy 0 rule 0\r
+\r
+5. send pkt which match rule 2 and rule 3, check the pkt can be received by queue 1 or 2::\r
+\r
+    >>> sendp([Ether(dst="00:00:00:01:03:13")/Dot1Q(vlan=1)/Dot1Q(vlan=12)/Raw("x"*480)], iface="<tester interface>", count=1)\r
+\r
+6. destroy rule 3, repeat step 5 and check the pkt can be received by queue 4::\r
+\r
+    flow destroy 0 rule 3\r
+\r
+7. send pkt which match rule 4 and rule 5, check the pkt will be received by queue 8::\r
+\r
+    >>> sendp([Ether(dst="00:00:00:01:03:03")/Dot1Q(vlan=1)/Dot1Q(vlan=2)/Raw("x"*480)], iface="<tester interface>", count=1)\r
+\r
+8. destroy rule 4, repeat step 7 and check the pkts can be received by queue 4::\r
+\r
+    flow destroy 0 rule 3\r
diff --git a/test_plans/index.rst b/test_plans/index.rst
index 68250fca..e614c425 100644
--- a/test_plans/index.rst
+++ b/test_plans/index.rst
@@ -58,6 +58,7 @@ The following are the test plans for the DPDK DTS automated test system.
     cvl_dcf_switch_filter_gtpu_test_plan
     cvl_dcf_flow_priority_test_plan
     cvl_dcf_qos_test_plan
+    cvl_flow_priority_test_plan
     cvl_ecpri_test_plan
     cvl_fdir_test_plan
     cvl_ip_fragment_rte_flow_test_plan
-- 
2.25.1


                 reply	other threads:[~2022-01-10  5:41 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220110141243.713106-1-qi.fu@intel.com \
    --to=qi.fu@intel.com \
    --cc=dts@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

test suite reviews and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://inbox.dpdk.org/dts/0 dts/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dts dts/ http://inbox.dpdk.org/dts \
		dts@dpdk.org
	public-inbox-index dts

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dts


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git