test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH V2] test_plans: add CVL switch filter test cases for generic_flow_api
@ 2019-12-04 20:24 Nannan Lu
  0 siblings, 0 replies; only message in thread
From: Nannan Lu @ 2019-12-04 20:24 UTC (permalink / raw)
  To: dts; +Cc: Nannan Lu

Add CVL switch filter non-pipeline mode 
vxlan/nvgre/pppoed/pppoes and pipeline 
mode vxlan/nvgre/non-tunnel to generic_flow_api.rst.

Signed-off-by: Nannan Lu <nannan.lu@intel.com>
---
 test_plans/generic_flow_api_test_plan.rst | 6872 ++++++++++++++++++++-
 1 file changed, 6796 insertions(+), 76 deletions(-)

diff --git a/test_plans/generic_flow_api_test_plan.rst b/test_plans/generic_flow_api_test_plan.rst
index 380d9e8..00e977c 100644
--- a/test_plans/generic_flow_api_test_plan.rst
+++ b/test_plans/generic_flow_api_test_plan.rst
@@ -1,4 +1,4 @@
-.. Copyright (c) <2016>, Intel Corporation
+.. Copyright (c) <2019>, Intel Corporation
    All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,7 @@ Prerequisites
 =============
 
 1. Hardware:
-   Fortville and Niantic
+   Fortville, Niantic and Columbiaville
   
 2. software: 
    dpdk: http://dpdk.org/git/dpdk
@@ -539,111 +539,6831 @@ Test case: Fortville tunnel vxlan
     testpmd> flow list 0
 
 
+Test case: CVL tunnel vxlan
+===========================
+
+1. Launch the app ``testpmd`` with the following arguments, and
+   create 16384 rules to make the fdir table full. The 16384 rules
+   are in the testpmd_cmds file::
+
+    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 -w 0000:18:00.2 \
+    --log-level="ice,8" -- -i --txq=8 --rxq=8 --cmdline-file=testpmd_cmds
+    testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+    testpmd> rx_vxlan_port add 4789 0
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> start
+
+   the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_ipv4_vxlan_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5",frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions rss queues 4 5 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23) \
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23) \
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19) \
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions rss queues 1 2 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23) \
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1 or 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23) \
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19) \
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1 and 2
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23) \
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23) \
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19) \
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions queue index 5 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)\
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=29,dport=23)\
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=20)\
+  /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 5
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=29,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=20)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=29,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=20)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=19)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=19)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=19)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions queue index 2 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.4", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.5" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.4", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.5" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.4", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.5" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.4", dst="192.168.0.3") /TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.5") /TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions rss queues 4 5 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.4", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.5")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.4", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.5")/TCP()/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=29)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=29)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=29)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=20,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=19)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions rss queues 1 2 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1 or 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=20,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=19)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1 and 2
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=20,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=19)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=29)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=29)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=29)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+    testpmd> flow list 0
+    testpmd> flow flush 0
+    testpmd> flow list 0
+
+
+Test case: CVL tunnel vxlan pipeline mode
+=========================================
+
+1. Launch the app ``testpmd`` with the following arguments::
+
+    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \
+    -w 0000:18:00.2,pipeline-mode-support=1 --log-level="ice,8" \
+    -- -i --txq=8 --rxq=8
+    testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+    testpmd> rx_vxlan_port add 4789 0
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> start
+
+   the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_ipv4_vxlan_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions queue index 2 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+   testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue and 3
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_vxlan_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=19,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=19,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=19,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=30)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=19,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=9)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=19,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=9)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=19,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=9)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x05)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x05)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x05)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_vxlan_ipv6_frag (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions queue index 2 / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions rss queues 2 3 end / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions drop / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv6_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_vxlan_ipv6_udp_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions rss queues 1 2 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1 or 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1 and 2
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv6_tcp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv6_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv6_icmpv6 (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x01)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x02)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x01)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x02)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x01)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x02)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+    testpmd> flow list 0
+    testpmd> flow flush 0
+    testpmd> flow list 0
+
+
 Test case: Fortville tunnel nvgre
 =================================
 
-   Prerequisites:
+   Prerequisites:
+
+   add two vfs on dpdk pf, then bind the vfs to vfio-pci::
+
+    echo 2 >/sys/bus/pci/devices/0000:05:00.0/max_vfs
+    ./usertools/dpdk-devbind.py -b vfio-pci 05:02.0 05:02.1
+
+1. Launch the app ``testpmd`` with the following arguments::
+
+    ./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -w 05:00.0 --file-prefix=pf --socket-mem=1024,1024 -- -i --rxq=16 --txq=16 --tx-offloads=0x8fff
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> set promisc all off
+    testpmd> start
+
+    ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e0000 -n 4 -w 05:02.0 --file-prefix=vf0 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> set promisc all off
+    testpmd> start
+
+    ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e00000 -n 4 -w 05:02.1 --file-prefix=vf1 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> set promisc all off
+    testpmd> start
+
+   the pf's mac address is 00:00:00:00:01:00
+   the vf0's mac address is 54:52:00:00:00:01
+   the vf1's mac address is 54:52:00:00:00:02
+
+2. create filter rules
+
+   inner mac + actions pf::
+
+    testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 1 / end
+
+   tni + inner mac + actions pf::
+
+    testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 2 / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 2 / end
+
+   inner mac + inner vlan + actions pf::
+
+    testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / vlan tci is 30 / end actions pf / queue index 3 / end
+
+   tni + inner mac + inner vlan + actions pf::
+
+    testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112244 / eth dst is 00:11:22:33:44:55 / vlan tci is 40 / end actions pf / queue index 4 / end
+
+   inner mac + outer mac + tni + actions pf::
+
+    testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112255 /  eth dst is 00:11:22:33:44:55 / end actions pf / queue index 5 / end
+
+   tni + inner mac + inner vlan + actions vf::
+
+    testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112266 / eth dst is 00:11:22:33:44:55 / vlan tci is 60 / end actions vf id 0 / queue index 1 / end
+
+   inner mac + outer mac + tni + actions vf::
+
+    testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112277 /  eth dst is 00:11:22:33:44:55 / end actions vf id 1 / queue index 3 / end
+
+3. send packets::
+
+    pkt1 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+    pkt2 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=2)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+    pkt31 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=30)/IP()/TCP()/Raw('x' * 20)
+    pkt32 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=31)/IP()/TCP()/Raw('x' * 20)
+    pkt4 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112244)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=40)/IP()/TCP()/Raw('x' * 20)
+    pkt51 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+    pkt52 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112256)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+    pkt53 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+    pkt54 = Ether(dst="00:11:22:33:44:77")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+    pkt55 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
+    pkt56 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
+    pkt61 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
+    pkt62 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
+    pkt63 = Ether(dst="54:52:00:00:00:01")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
+    pkt64 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
+    pkt71 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+    pkt72 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+    pkt73 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
+    pkt74 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
+
+   verify pkt1 received by pf queue 1, pkt2 to pf queue 2,
+   pkt31 to pf queue 3, pkt32 to pf queue 1, pkt4 to pf queue 4,
+   pkt51 to pf queue 5, pkt52 to pf queue 1, pkt53 to pf queue 1,
+   pkt54 to pf queue 1, pkt55 to pf queue 0, pf can't receive pkt56.
+   pkt61 to vf0 queue 1 and pf queue 1, pf and vf0 can't receive pkt62,
+   pkt63 to vf0 queue 0, pkt64 to pf queue 0, vf0 can't receive pkt64,
+   pkt71 to vf1 queue 3 and pf queue 1, pkt72 to pf queue 1, vf1 can't receive
+   pkt72, pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74.
+
+4. verify rules can be listed and destroyed::
+
+    testpmd> flow list 0
+    testpmd> flow destroy 0 rule 0
+
+   verify pkt51 to pf queue 5, pkt53 and pkt55 to pf queue 0,
+   pf can't receive pkt52,pkt54 and pkt56. pkt71 to vf1 queue 3,
+   pkt72 and pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74.
+   Then::
+
+    testpmd> flow flush 0
+    testpmd> flow list 0
+
+
+Test case: CVL tunnel nvgre
+===========================
+
+1. Launch the app ``testpmd`` with the following arguments, and create
+   16384 rules to make the fdir table full. The 16384 rules are in the
+   testpmd_cmds file::
+
+    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 -w 0000:18:00.2 \
+    --log-level="ice,8" -- -i --txq=8 --rxq=8 --cmdline-file=testpmd_cmds
+    testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> start
+
+   the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_ipv4_nvgre_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x' * 80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a 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 is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+  Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+  Raw('x'*80)], iface="enp27s0f2", count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19)/\
+  Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a 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 is 25 dst is 23 / end actions rss queues 1 2 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+  Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet to queue 1 and 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+  Raw('x'*80)], iface="enp27s0f2", count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19)/\
+  Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not to queue 1 and 2
+
+3) drop action
+
+create a 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 is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+  Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+  Raw('x'*80)], iface="enp27s0f2", count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19)/\
+  Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=20,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=39)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions rss queues 1 2 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" )/TCP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1 or 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=20,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=39)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1 and 2
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3" )/TCP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=20,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=39)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=1,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=20)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=1,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=20)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=1,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=20)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/ICMP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/ICMP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/ICMP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_nvgre_mac_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_mac_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a9")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+  iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_mac_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 /  eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP(sport=25,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP(sport=2,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP(sport=25,dport=20)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 /  eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / udp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP(sport=25,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP(sport=2,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP(sport=25,dport=20)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 /  eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP(sport=25,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP(sport=2,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP(sport=25,dport=20)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_mac_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_mac_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packets::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_mac_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8  / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+  Ether(dst="68:05:ca:8d:ed:a8")/\
+  IP(src="192.168.1.2", dst="192.168.1.3")/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+    testpmd> flow list 0
+    testpmd> flow flush 0
+    testpmd> flow list 0
+
+
+Test case: CVL tunnel nvgre pipeline mode
+=========================================
+
+1. Launch the app ``testpmd`` with the following arguments::
+
+    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \
+    -w 0000:18:00.2,pipeline-mode-support=1 --log-level="ice,8" \
+    -- -i --txq=8 --rxq=8
+    testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> start
+
+   the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_ipv4_nvgre_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/TCP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/TCP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/TCP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/TCP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/TCP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_nvgre_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=20)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=20)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=20)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=3,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=20)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=3,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=20)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=3,dport=23)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=20)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=4,dport=23)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=10)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=4,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=25,dport=10)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/\
+  Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=4,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/\
+  Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=25,dport=10)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x04)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x04)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x04)/\
+  Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_nvgre_ipv6_frag (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions queue index 2 / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions rss queues 2 3 end / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions drop / end
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv6_PAY (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_nvgre_ipv6_udp_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv6_tcp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=7,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=7,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=7,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv6_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions queue index 5 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=39)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 5
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=39)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=39)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv6_icmpv6 (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP()/NVGRE()/Ether()/\
+  IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+    testpmd> flow list 0
+    testpmd> flow flush 0
+    testpmd> flow list 0
+
+
+Test case: CVL PPPoD
+====================
+
+1. Launch the app ``testpmd`` with the following arguments, and create \
+   16384 rules to make the fdir table full. The 16384 rules are in the \
+   testpmd_cmds file::
+
+    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \
+    -w 0000:18:00.2 --log-level="ice,8" -- -i --txq=8 --rxq=8 \
+    --cmdline-file=testpmd_cmds
+    testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> start
+
+   the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_pppod_pay
+
+1) distribute to a single queue
+
+create rules::
+
+  testpmd> flow create 0 ingress pattern eth type is 0x8863 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+  Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+  Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth type is 0x8863 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+  Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+  Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth type is 0x8863 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+  Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+  Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+    testpmd> flow list 0
+    testpmd> flow flush 0
+    testpmd> flow list 0
+
+
+Test case: CVL PPPoE
+====================
+
+1. Launch the app ``testpmd`` with the following arguments, and create \
+   16384 rules to make the fdir table full. The 16384 rules are in the \
+   testpmd_cmds file::
+
+    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \
+    -w 0000:18:00.2 --log-level="ice,8" -- -i --txq=8 --rxq=8 \
+    --cmdline-file=testpmd_cmds
+    testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> start
+
+   the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_pppoe_pay
+
+1) distribute to a single queue
+
+create rules::
+
+  testpmd> flow create 0 ingress pattern eth type is 0x8864 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth type is 0x8864 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth type is 0x8864 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_pppoe_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify the packet to queue 1
+
+send mismatched packets::
+
+  sendp([Ether(dst="00:11:22:33:44:54",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify the packet not to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type= 0x8100)/\
+  Dot1Q(vlan=1,type= 0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether(dst="00:11:22:33:44:54",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify the packet not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether(dst="00:11:22:33:44:54",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify the packet not dropped
+
+mac_pppoe_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+send a mismatched packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=2,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=2,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=2,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_pppoe_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv4_sctp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv4_icmp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+  IP()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55", type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/TCP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 4 5 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/TCP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3 or 4 or 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/TCP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_sctp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/IPv6()/\
+  SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_icmpv6
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+  sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+  Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+  IPv6()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+3. verify rules can be listed and destroyed::
+
+    testpmd> flow list 0
+    testpmd> flow flush 0
+    testpmd> flow list 0
+
+
+Test case: CVL non-tunnel pipeline mode
+=======================================
+
+1. Launch the app ``testpmd`` with the following arguments::
+
+    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \
+    -w 0000:18:00.2,pipeline-mode-support=1 --log-level="ice,8" \
+    -- -i --txq=8 --rxq=8
+    testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> start
+
+   the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=7,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+create a rule with partial fields::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=7,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+create a rule with partial fields::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=7,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+create a rule with partial fields::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions drop / end
+
+send a packet with complete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP()/\
+  Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=2,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=2,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=2,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  UDP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=25,dport=7)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=25,dport=7)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  TCP(sport=25,dport=7)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  SCTP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  ICMP(type=0x08)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  ICMP(type=0x08)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  ICMP(type=0x08)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+  ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv6_frag
+
+1) distribute to a single queue
+
+create a rule with src ipv6 + dst ipv6::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions queue index 5 / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 5
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 5
+
+create a rule with dst ipv6 + tc::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2027",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queue
+
+create a rule with src ipv6 + dst ipv6::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions rss queues 2 3 end / end
 
-   add two vfs on dpdk pf, then bind the vfs to vfio-pci::
+send a packet::
 
-    echo 2 >/sys/bus/pci/devices/0000:05:00.0/max_vfs
-    ./usertools/dpdk-devbind.py -b vfio-pci 05:02.0 05:02.1
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
 
-1. Launch the app ``testpmd`` with the following arguments::
+verify this packet to queue 2 or 3
 
-    ./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -w 05:00.0 --file-prefix=pf --socket-mem=1024,1024 -- -i --rxq=16 --txq=16 --tx-offloads=0x8fff
-    testpmd> set fwd rxonly
-    testpmd> set verbose 1
-    testpmd> set promisc all off
-    testpmd> start
+send mismatched packets::
 
-    ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e0000 -n 4 -w 05:02.0 --file-prefix=vf0 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff
-    testpmd> set fwd rxonly
-    testpmd> set verbose 1
-    testpmd> set promisc all off
-    testpmd> start
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
 
-    ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e00000 -n 4 -w 05:02.1 --file-prefix=vf1 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff
-    testpmd> set fwd rxonly
-    testpmd> set verbose 1
-    testpmd> set promisc all off
-    testpmd> start
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
 
-   the pf's mac address is 00:00:00:00:01:00
-   the vf0's mac address is 54:52:00:00:00:01
-   the vf1's mac address is 54:52:00:00:00:02
+verify these packets not to queue 2 and 3
 
-2. create filter rules
+create a rule with dst ipv6 + tc::
 
-   inner mac + actions pf::
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end
 
-    testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 1 / end
+send a packet::
 
-   tni + inner mac + actions pf::
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
 
-    testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 2 / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 2 / end
+verify this packet to queue 2 or 3
 
-   inner mac + inner vlan + actions pf::
+send mismatched packets::
 
-    testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / vlan tci is 30 / end actions pf / queue index 3 / end
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2027",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
 
-   tni + inner mac + inner vlan + actions pf::
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
 
-    testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112244 / eth dst is 00:11:22:33:44:55 / vlan tci is 40 / end actions pf / queue index 4 / end
+verify these packets not to queue 2 and 3
 
-   inner mac + outer mac + tni + actions pf::
+3) drop action
 
-    testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112255 /  eth dst is 00:11:22:33:44:55 / end actions pf / queue index 5 / end
+create a rule with src ipv6 + dst ipv6::
 
-   tni + inner mac + inner vlan + actions vf::
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions drop / end
 
-    testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112266 / eth dst is 00:11:22:33:44:55 / vlan tci is 60 / end actions vf id 0 / queue index 1 / end
+send a packet::
 
-   inner mac + outer mac + tni + actions vf::
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
 
-    testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112277 /  eth dst is 00:11:22:33:44:55 / end actions vf id 1 / queue index 3 / end
+verify this packet dropped
 
-3. send packets::
+send mismatched packets::
 
-    pkt1 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
-    pkt2 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=2)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
-    pkt31 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=30)/IP()/TCP()/Raw('x' * 20)
-    pkt32 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=31)/IP()/TCP()/Raw('x' * 20)
-    pkt4 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112244)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=40)/IP()/TCP()/Raw('x' * 20)
-    pkt51 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
-    pkt52 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112256)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
-    pkt53 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
-    pkt54 = Ether(dst="00:11:22:33:44:77")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
-    pkt55 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
-    pkt56 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
-    pkt61 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
-    pkt62 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
-    pkt63 = Ether(dst="54:52:00:00:00:01")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
-    pkt64 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
-    pkt71 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
-    pkt72 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
-    pkt73 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
-    pkt74 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
 
-   verify pkt1 received by pf queue 1, pkt2 to pf queue 2,
-   pkt31 to pf queue 3, pkt32 to pf queue 1, pkt4 to pf queue 4,
-   pkt51 to pf queue 5, pkt52 to pf queue 1, pkt53 to pf queue 1,
-   pkt54 to pf queue 1, pkt55 to pf queue 0, pf can't receive pkt56.
-   pkt61 to vf0 queue 1 and pf queue 1, pf and vf0 can't receive pkt62,
-   pkt63 to vf0 queue 0, pkt64 to pf queue 0, vf0 can't receive pkt64,
-   pkt71 to vf1 queue 3 and pf queue 1, pkt72 to pf queue 1, vf1 can't receive
-   pkt72, pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74.
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
 
-4. verify rules can be listed and destroyed::
+verify these packets not dropped
 
-    testpmd> flow list 0
-    testpmd> flow destroy 0 rule 0
+create a rule with dst ipv6 + tc::
 
-   verify pkt51 to pf queue 5, pkt53 and pkt55 to pf queue 0,
-   pf can't receive pkt52,pkt54 and pkt56. pkt71 to vf1 queue 3,
-   pkt72 and pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74.
-   Then::
-    
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2027",tc=3)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+  IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv6_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions queue index 3 / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+  UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+  TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv6_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions queue index 5 / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 5
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=3,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=4)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 5
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=3,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=4)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=3,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  UDP(sport=25,dport=4)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv6_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not dropped
+
+mac_ipv6_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=9)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=9)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  SCTP(sport=25,dport=9)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not dropped
+
+mac_ipv6_icmpv6 (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions queue index 2 / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x03)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x03)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+  testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions drop / end
+
+send a packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+  sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+  dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+  ICMP(type=0x03)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+    testpmd> flow list 0
     testpmd> flow flush 0
     testpmd> flow list 0
 
-- 
2.17.1


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-12-04 12:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-04 20:24 [dts] [PATCH V2] test_plans: add CVL switch filter test cases for generic_flow_api Nannan Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).