test suite reviews and discussions
 help / color / mirror / Atom feed
From: Peng Yuan <yuan.peng@intel.com>
To: dts@dpdk.org
Cc: Peng Yuan <yuan.peng@intel.com>
Subject: [dts] [PATCH v2]test_plans: rework case struction
Date: Wed,  1 Apr 2020 07:51:55 +0000	[thread overview]
Message-ID: <1585727515-149718-1-git-send-email-yuan.peng@intel.com> (raw)

1/ rework the case stucture.
2/ add stress cases.
3/ add validate cases.

Signed-off-by: Peng Yuan <yuan.peng@intel.com>
---
 test_plans/cvl_fdir_test_plan.rst | 3425 +++++++++++++------------------------
 1 file changed, 1194 insertions(+), 2231 deletions(-)

diff --git a/test_plans/cvl_fdir_test_plan.rst b/test_plans/cvl_fdir_test_plan.rst
index fe8cac5..08e8f21 100644
--- a/test_plans/cvl_fdir_test_plan.rst
+++ b/test_plans/cvl_fdir_test_plan.rst
@@ -83,13 +83,14 @@ Pattern and input set
     +------------------------------+----------------------------+-------------------------------------------------------------------------------+
 
 Notes: 1. Enable fdir filter for UDP tunnel: Vxlan / NVGRE (OS default package) , share code not
-      support outer header as inputset, so Out Dest IP and VNI/GRE_KEY may not able to be implemented.
+          support outer header as inputset, so Out Dest IP and VNI/GRE_KEY may not able to be implemented.
        2. For VXLAN case MAC_IPV4_TUN_*** means MAC_IPV4_UDP_VXLAN_***
        3. For Dest MAC, there is package /sharecode limitation on multicast dst mac support for FDIR
 
 Function type
 -------------
 
+    validate
     create
     list
     destroy
@@ -113,6 +114,7 @@ Prerequisites
 
 1. Hardware:
    columbiaville_25g/columbiaville_100g
+   design the cases with 2 ports card.
 
 2. Software:
    DPDK: http://dpdk.org/git/dpdk
@@ -127,7 +129,7 @@ Prerequisites
 
 5. Launch the app ``testpmd`` with the following arguments::
 
-    ./testpmd -c 0xff -n 6 -w 86:00.0 -- -i --portmask=0xff --rxq=64 --txq=64 --port-topology=loop
+    ./testpmd -c 0xff -n 6 -w 86:00.0,,flow-mark-support=1 -- -i --portmask=0xff --rxq=64 --txq=64 --port-topology=loop
     testpmd> set fwd rxonly
     testpmd> set verbose 1
 
@@ -138,11 +140,7 @@ Prerequisites
 
    Notes: if need two ports environment, launch ``testpmd`` with the following arguments::
 
-    ./testpmd -c 0xff -n 6 -w 86:00.0 -w 86:00.1 -- -i --portmask=0xff --rxq=64 --txq=64 --port-topology=loop
-
-   If create rules with mark actions, please add the following parameters in testpmd command line::
-
-    -w 86:00.0,flow-mark-support=1 -w 86:00.1,flow-mark-support=1
+    ./testpmd -c 0xff -n 6 -w 86:00.0,flow-mark-support=1 -w 86:00.1,flow-mark-support=1 -- -i --portmask=0xff --rxq=64 --txq=64 --port-topology=loop
 
 
 Default parameters
@@ -397,669 +395,694 @@ Send packets
 
    matched packets::
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(frag=1)/Raw('x'*20)
-    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/UDP()/Raw('x'*20)
-    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
-    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/ICMP()/Raw('x'*20)
-    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/Raw('x'*20)
-    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
-    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/UDP()/Raw('x'*20)
-    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
-    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/ICMP()/Raw('x'*20)
+    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
+    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(frag=1)/Raw('x'*20)
+    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/UDP()/Raw('x'*20)
+    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
+    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/ICMP()/Raw('x'*20)
+    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/Raw('x'*20)
+    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
+    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/UDP()/Raw('x'*20)
+    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
+    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/ICMP()/Raw('x'*20)
 
    mismatched packets::
 
-    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/SCTP()/Raw('x'*20)
-    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/SCTP()/Raw('x'*20)
-    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
-    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
-    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)
-    p_gtpu16 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw('x'*20)
+    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/SCTP()/Raw('x'*20)
+    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/SCTP()/Raw('x'*20)
+    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
+    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
+    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)
+    p_gtpu16 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw('x'*20)
 
 * MAC_IPV4_GTPU
 
    matched packets::
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(frag=1)/Raw('x'*20)
-    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/UDP()/Raw('x'*20)
-    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
-    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/ICMP()/Raw('x'*20)
-    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/Raw('x'*20)
-    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
-    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/UDP()/Raw('x'*20)
-    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
-    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/ICMP()/Raw('x'*20)
-    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
+    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)
+    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(frag=1)/Raw('x'*20)
+    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/UDP()/Raw('x'*20)
+    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
+    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/ICMP()/Raw('x'*20)
+    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/Raw('x'*20)
+    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
+    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/UDP()/Raw('x'*20)
+    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
+    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/ICMP()/Raw('x'*20)
+    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
 
    mismatched packets::
 
-    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/Raw('x'*20)
-    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/SCTP()/Raw('x'*20)
-    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/SCTP()/Raw('x'*20)
-    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/IP()/Raw('x'*20)
-
-Test case: MAC_IPV4_PAY queue index
-===================================
+    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/Raw('x'*20)
+    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/SCTP()/Raw('x'*20)
+    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/SCTP()/Raw('x'*20)
+    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/IP()/Raw('x'*20)
 
-1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
+Test case: flow validation
+==========================
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+1. validate MAC_IPV4_PAY with queue index action::
 
-3. verify rules can be listed and destroyed::
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
 
-    testpmd> flow list 0
+   get the message::
 
-   check the existing rule.
-   destroy the rule::
+    Flow rule validated
 
-    testpmd> flow destroy 0 rule 0
+2. repeat step 1 with all patterns in pattern and input set table,
+   get the same result.
 
-   verify matched packets are not distributed to queue 1.
-   check there is no rule listed.
+3. repeat step 1-2 with action rss queues/drop/passthru/mark/mark+rss,
+   get the same result.
 
-Test case: MAC_IPV4_PAY selected inputset queue index
-=====================================================
+4. validate combined use of actions::
 
-1. create filter rules::
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark / count / end
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 0 1 end / mark id 1 / count identifier 0x1234 shared on / end
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions passthru / mark id 2 / count identifier 0x34 shared off / end
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark id 3 / rss / count shared on / end
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / count shared off / end
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 1 / end actions queue index 1 / end
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 17 / end actions queue index 2 / end
+   get the message::
 
-2. send matched packets::
+    Flow rule validated
 
-    pkt1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=1) / Raw('x' * 80)
-    pkt2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, proto=1) / Raw('x' * 80)
-    pkt3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
-    pkt4 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
-    pkt5 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=17, ttl=2, tos=4)/Raw('x' * 80)
-    pkt6 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, proto=17, ttl=2, tos=4)/Raw('x' * 80)
+5. check the flow list::
 
-   check the pkt1 and pkt2 are redirected to queue 1.
-   check the pkt3-pkt6 are redirected to queue 2
-   send mismatched packets::
+    testpmd> flow list 0
 
-    pkt7 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.22", proto=1) / Raw('x' * 80)
-    pkt8 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=6) / Raw('x' * 80)
-    pkt9 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/TCP(sport=22,dport=23)/ Raw('x' * 80)
-    pkt10 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1)/TCP(sport=22,dport=23)/ Raw('x' * 80)
+   there is no rule listed.
 
-   check the packets are not distributed to queue 1 or queue 2.
+Test case: negative validation
+==============================
 
-3. verify rules can be listed and destroyed::
+1. only count action::
 
-    testpmd> flow list 0
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions count / end
 
-   check the existing rule.
-   destroy the rule::
+   get the error message::
 
-    testpmd> flow flush 0
+    Invalid input action: Invalid argument
 
-   verify matched packets are not distributed to expected queue.
-   check there is no rule listed.
+2. void action::
 
-Test case: MAC_IPV4_UDP queue index
-===================================
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / and actions end
 
-1. create filter rules::
+   get the message::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions queue index 1 / end
+    Invalid argument
 
-2. send matched packets, check the packets is distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+3. conflict action::
 
-3. verify rules can be listed and destroyed::
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 2 3 end / rss / end
 
-    testpmd> flow list 0
+   get the message::
 
-   check the existing rule.
-   destroy the rule::
+    Unsupported action combination: Invalid argument
 
-    testpmd> flow destroy 0 rule 0
+4. invalid mark id::
 
-   verify matched packet is not distributed to queue 1.
-   check there is no rule listed.
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions passthru / mark id 4294967296 / end
 
-Test case: MAC_IPV4_TCP queue index
-===================================
+   get the message::
 
-1. create filter rules::
+    Bad arguments
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 63 / end
+5. invalid input set::
 
-2. send matched packets, check the packets is distributed to queue 63.
-   send mismatched packets, check the packets are not distributed to queue 63.
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tc is 4 / end actions queue index 1 / end
 
-3. verify rules can be listed and destroyed::
+   get the message::
 
-    testpmd> flow list 0
+    Bad arguments
 
-   check the existing rule.
-   destroy the rule::
+6. invalid queue index::
 
-    testpmd> flow destroy 0 rule 0
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 64 / end
 
-   verify matched packet is not distributed to queue 63.
-   check there is no rule listed.
+   get the message::
 
-Test case: MAC_IPV4_SCTP queue index
-====================================
+    Invalid input action: Invalid argument
 
-1. create filter rules::
+7. invalid rss queues parameter
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1 / end actions queue index 2 / end
+   Invalid number of queues::
 
-2. send matched packets, check the packets is distributed to queue 2.
-   send mismatched packets, check the packets are not distributed to queue 2.
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 1 2 3 end / end
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 0 end / end
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues end / end
 
-3. verify rules can be listed and destroyed::
+   get the message::
 
-    testpmd> flow list 0
+    Invalid input action: Invalid argument
 
-   check the existing rule.
-   destroy the rule::
+   Discontinuous queues::
 
-    testpmd> flow destroy 0 rule 0
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 1 2 3 5 end / end
 
-   verify matched packet is not distributed to queue 2.
-   check there is no rule listed
+   get the message::
 
-Test case: MAC_IPV6_PAY queue index
-===================================
+    Discontinuous queue region: Invalid argument
 
-1. create filter rules::
+   invalid rss queues index::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions queue index 1 / end
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 63 64 end / end
 
-2. send matched packets, check the packets is distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+   get the message::
 
-3. verify rules can be listed and destroyed::
+    Invalid queue region indexes.: Invalid argument
 
-    testpmd> flow list 0
+8. Invalid value of input set::
 
-   check the existing rule.
-   destroy the rule::
+    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x100 / end actions queue index 1 / end
+    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / gtp_psc qfi is 0x5 / end actions queue index 2 / end
+    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / end actions queue index 1 / end
 
-    testpmd> flow destroy 0 rule 0
+   get the message::
 
-   verify matched packet is not distributed to queue 1.
-   check there is no rule listed.
+    Bad arguments
 
-Test case: MAC_IPV6_PAY selected inputset queue index
-=====================================================
+9. unsupported pattern,validate GTPU rule with OS default package::
 
-1. create filter rules::
+    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions drop / end
 
-    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 44 / end actions queue index 1 / end
-    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 6 / end actions queue index 2 / end
+   get the message::
 
-2. send matched packets::
+    Bad arguments
 
-    pkt1 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", nh=44, tc=1, hlim=2)/("X"*480)
-    pkt2 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment(1000)/("X"*480)
-    pkt3 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", nh=44)/TCP(sport=22,dport=23)/("X"*480)
-    pkt4 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment(1000)/TCP(sport=22,dport=23)/("X"*480)
-    pkt5 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", nh=6)/("X"*480)
-    pkt6 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)
+10. invalid port::
 
-   check pkt1-pkt4 are redirected to queue 1.
-   check pkt5 and pkt6 are redirected to queue 2.
-   send mismatched packets::
+    flow validate 2 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
 
-    pkt7 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2021", nh=44)/("X"*480)
-    pkt8 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)
-    pkt9 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", nh=17)/("X"*480)
+   get the message::
 
-   check the packets are not distributed to queue 1 or queue 2.
+    No such device: No such device
 
-3. verify rules can be listed and destroyed::
+11. check the flow list::
 
     testpmd> flow list 0
 
-   check the existing rule.
-   destroy the rule::
+   there is no rule listed.
 
-    testpmd> flow destroy 0 rule 0
 
-   verify matched packet are not distributed to expected queue.
-   check there is no rule listed.
+Test case: MAC_IPV4_PAY pattern
+===============================
 
-Test case: MAC_IPV6_UDP queue index
-===================================
+Subcase 1: MAC_IPV4_PAY queue index
+-----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
 
-2. send matched packets, check the packets is distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets are distributed to queue 1 without FDIR matched ID.
+   send mismatched packets, check the packets are not distributed to queue 1 without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   check the existing rule.
+   check the rule listed.
    destroy the rule::
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is not distributed to queue 1.
+4. verify matched packets are not distributed to queue 1 without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV6_TCP queue index
-===================================
+Subcase 2: MAC_IPV4_PAY rss queues
+----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 2 3 end / end
 
-2. send matched packets, check the packets is distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets are distributed to queue 2 or 3 without without FDIR matched ID.
+   send mismatched packets, check the packets are not distributed to queue 2 or 3 without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are not distributed to queue 2 or 3 without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV4_PAY passthru
+--------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is not distributed to queue 1.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions passthru / end
 
-Test case: MAC_IPV6_SCTP queue index
-====================================
+2. send matched packets, check the packets are distributed by RSS without FDIR matched ID.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions queue index 1 / end
+4. verify matched packets are distributed to the same queue without FDIR matched ID=0x0.
+   check there is no rule listed.
 
-2. send matched packets, check the packets is distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+Subcase 4: MAC_IPV4_PAY drop
+----------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions drop / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are dropped
+   send mismatched packets, check the packets are not dropped.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is not distributed to queue 1.
+4. verify matched packets are not dropped.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_PAY queue index
-============================================
+Subcase 5: MAC_IPV4_PAY mark+rss
+--------------------------------
+Note: This combined action is mark with RSS which is without queues specified.
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions mark / rss / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 6: MAC_IPV4_PAY mark
+----------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify the packets hit rule are not distributed to queue 1.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions mark id 1 / end
 
-Test case: MAC_IPV4_TUN_IPV4_UDP queue index
-============================================
+2. repeat the steps of passthru with mark part in subcase 3,
+   get the same result.
+
+Subcase 7: MAC_IPV4_PAY protocal
+--------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 1 / end actions queue index 1 / mark id 1 / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 17 / end actions passthru / mark id 3 / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets::
 
-3. verify rules can be listed and destroyed::
+    pkt1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=1) / Raw('x' * 80)
+    pkt2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, proto=1) / Raw('x' * 80)
+    pkt3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
+    pkt4 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
+    pkt5 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=17, ttl=2, tos=4)/Raw('x' * 80)
+    pkt6 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, proto=17, ttl=2, tos=4)/Raw('x' * 80)
 
-    testpmd> flow list 0
+   check the pkt1 and pkt2 are redirected to queue 1 with FDIR matched ID=0x1.
+   check the pkt3-pkt6 are distributed by RSS with FDIR matched ID=0x3.
+   send mismatched packets::
 
-   check the existing rule.
-   destroy the rule::
+    pkt7 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.22", proto=1) / Raw('x' * 80)
+    pkt8 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=6) / Raw('x' * 80)
+    pkt9 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/TCP(sport=22,dport=23)/ Raw('x' * 80)
+    pkt10 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1)/TCP(sport=22,dport=23)/ Raw('x' * 80)
 
-    testpmd> flow destroy 0 rule 0
+   check the packets received have not FDIR matched ID.
 
-   verify the packets hit rule are not distributed to queue 1.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets have not FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_TCP queue index
-============================================
+
+Test case: MAC_IPV4_UDP pattern
+===============================
+
+Subcase 1: MAC_IPV4_UDP queue index
+-----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions queue index 63 / mark id 0 / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets is distributed to queue 63 with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   check the existing rule.
+   check the rule listed.
    destroy the rule::
 
     testpmd> flow destroy 0 rule 0
 
-   verify the packets hit rule are not distributed to queue 1.
+4. verify matched packet is received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_SCTP queue index
-=============================================
+Subcase 2: MAC_IPV4_UDP rss queues
+----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions rss queues 0 1 2 3 end / mark id 4294967294 / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets is distributed to queue 0-3 with FDIR matched ID=0xfffffffe.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packet is not received without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV4_UDP passthru
+--------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rule with mark::
+
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions passthru / mark id 1 / end
+
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-   verify the packets hit rule are not distributed to queue 1.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY queue index
-================================================
+Subcase 4: MAC_IPV4_UDP drop
+----------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions drop / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packet, check the packet is dropped.
+   send mismatched packets, check the packets are not dropped.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packet is dropped.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 5: MAC_IPV4_UDP mark+rss
+--------------------------------
+Note: This combined action is mark with RSS which is without queues specified.
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
+
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions mark id 2 / rss / end
+
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x2
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-   verify the packets hit rule are not distributed to queue 1.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP queue index
-================================================
+Subcase 6: MAC_IPV4_UDP mark
+----------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions mark id 1 / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. repeat the step 2-3 of in subcase 3,
+   get the same result.
 
-3. verify rules can be listed and destroyed::
+Test case: MAC_IPV4_TCP pattern
+===============================
 
-    testpmd> flow list 0
+1. replace "udp" with "tcp" in all the subcases of MAC_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_UDP pattern.
+3. get the same result.
 
-   check the existing rule.
-   destroy the rule::
+Test case: MAC_IPV4_SCTP pattern
+================================
 
-    testpmd> flow destroy 0 rule 0
+1. replace "udp" with "sctp" in all the subcases of MAC_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_UDP pattern.
+3. get the same result.
 
-   verify the packets hit rule are not distributed to queue 1.
-   check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP queue index
-================================================
+Test case: MAC_IPV6_PAY pattern
+===============================
+
+Subcase 1: MAC_IPV6_PAY queue index
+-----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions queue index 1 / mark / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets is distributed to queue 1 with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   check the existing rule.
+   check the rule listed.
    destroy the rule::
 
     testpmd> flow destroy 0 rule 0
 
-   verify the packets hit rule are not distributed to queue 1.
+4. verify matched packet is received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP queue index
-=================================================
+Subcase 2: MAC_IPV6_PAY rss queues
+----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end \
+    actions rss queues 56 57 58 59 60 61 62 63 end / mark / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets is distributed to queue 56-63 with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are not distributed to queue 56-63 with FDIR matched ID=0x0.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packet is received without FDIR matched ID=0x0.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV6_PAY passthru
+--------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify the packets hit rule are not distributed to queue 1.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions passthru / mark / end
 
-Test case: queue index wrong parameters
-=======================================
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-1. invalid parameters::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 64 / end
+4. verify matched packets are destributed to the same queue without FDIR matched ID .
+   check there is no rule listed.
 
-   failed to be created.
+Subcase 4: MAC_IPV6_PAY drop
+----------------------------
 
-2. same pattern items, different action::
+1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 2 / end
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions drop / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions drop / end
+
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are not dropped.
 
-   flow 1 can be created successfully,
-   flow 2 and flow 3 failed to be created cause of confliction.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packet is dropped.
+   check there is no rule listed.
 
-Test case: MAC_IPV4_PAY passthru/count
-======================================
+Subcase 5: MAC_IPV6_PAY mark+rss
+--------------------------------
+Note: This combined action is mark with RSS which is without queues specified.
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions passthru / count / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions mark / rss / end
 
-2. send matched packets, check the packets are redirected by RSS
-   send mismatched packets, check the packets are redirected by RSS
-   check the count number::
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-    flow query 0 0 count
-    count:
-     hits_set: 1
-     bytes_set: 0
-     hits: 2
-     bytes: 0
+3. repeat step 3 of subcase 1.
 
-3. verify rules can be listed and destroyed::
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-    testpmd> flow list 0
+Subcase 6: MAC_IPV6_PAY mark
+----------------------------
 
-   check the existing rule.
-   destroy the rule::
+1. create filter rules::
 
-    testpmd> flow destroy 0 rule 0
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions mark / end
 
-   verify matched packets are redirected to the same queue.
-   check there is no rule listed.
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-Test case: MAC_IPV4_PAY passthru/mark
-=====================================
+Subcase 7: MAC_IPV6_PAY protocal
+--------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is ABAB:910A:2222:5498:8475:1111:3900:1010 proto is 44 / end actions rss queues 5 6 end / mark id 1 / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 6 / end actions mark id 2 / rss / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets::
 
-3. verify rules can be listed and destroyed::
+    pkt1 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1010", nh=44, tc=1, hlim=2)/("X"*480)
+    pkt2 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1010")/IPv6ExtHdrFragment(1000)/("X"*480)
+    pkt3 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1010", nh=44)/TCP(sport=22,dport=23)/("X"*480)
+    pkt4 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1010")/IPv6ExtHdrFragment(1000)/TCP(sport=22,dport=23)/("X"*480)
+    pkt5 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", nh=6)/("X"*480)
+    pkt6 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)
 
-    testpmd> flow list 0
+   check pkt1-pkt4 are redirected to queue 5 or queue 6 with FDIR matched ID=0x1.
+   check pkt5 and pkt6 are distributed by RSS with FDIR matched ID=0x2.
+   send mismatched packets::
 
-   check the existing rule.
-   destroy the rule::
+    pkt7 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1011", nh=44)/("X"*480)
+    pkt8 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)
+    pkt9 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", nh=17)/("X"*480)
 
-    testpmd> flow destroy 0 rule 0
+   check the packets received have not FDIR matched ID.
 
-   verify matched packets are redirected to the same queue without FDIR ID.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets have not FDIR matched.
    check there is no rule listed.
 
-Test case: MAC_IPV4_UDP passthru/mark
-=====================================
+
+Test case: MAC_IPV6_UDP pattern
+===============================
+
+Subcase 1: MAC_IPV6_UDP queue index
+-----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions passthru / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions queue index 1 / mark / end
 
-2. send matched packets, check the packets are redirected by RSS.
-   send mismatched packets, check the packets are redirected by RSS.
+2. send matched packets, check the packets is distributed to queue 1 with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are received without FDIR matched ID=0x0.
 
 3. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   check the existing rule.
+   check the rule listed.
    destroy the rule::
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue.
+4. verify matched packet is received without FDIR matched ID=0x0.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TCP passthru/mark
-=====================================
+Subcase 2: MAC_IPV6_UDP rss queues
+----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions rss / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets is distributed by RSS.
+   send mismatched packets, check the packets are distributed by RSS too.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packet is destributed to the same queue.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV6_UDP passthru
+--------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions passthru / mark / end
 
-Test case: MAC_IPV4_SCTP passthru/mark
-======================================
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1 / end actions passthru / mark / end
+4. verify matched packets are destributed to the same queue without FDIR matched ID .
+   check there is no rule listed.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+Subcase 4: MAC_IPV6_UDP drop
+----------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions drop / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are not dropped.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify matched packet is dropped.
    check there is no rule listed.
 
-Test case: MAC_IPV6_PAY passthru/mark
-=====================================
+Subcase 5: MAC_IPV6_UDP mark+rss
+--------------------------------
+Note: This combined action is mark with RSS which is without queues specified.
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2 tc is 1 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions mark / rss / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 6: MAC_IPV6_UDP mark
+----------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions mark / end
 
-Test case: MAC_IPV6_UDP passthru/mark
-=====================================
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions passthru / mark / end
+Test case: MAC_IPV6_TCP pattern
+===============================
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+1. replace "udp" with "tcp" in all the subcases of MAC_IPV6_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV6_UDP pattern.
+3. get the same result.
 
-3. verify rules can be listed and destroyed::
+Test case: MAC_IPV6_SCTP pattern
+================================
 
-    testpmd> flow list 0
+1. replace "udp" with "sctp" in all the subcases of MAC_IPV6_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV6_UDP pattern.
+3. get the same result.
 
-   check the existing rule.
-   destroy the rule::
 
-    testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
 
-Test case: MAC_IPV6_TCP passthru/mark
-=====================================
+Test case: MAC_IPV4_TUN_IPV4_PAY pattern
+========================================
+
+Subcase 1: MAC_IPV4_TUN_IPV4_PAY queue index
+--------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are distributed to queue 1 without FDIR matched ID.
+   send mismatched packets, check the packets are not distributed to queue 1 without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1070,106 +1093,92 @@ Test case: MAC_IPV6_TCP passthru/mark
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+   verify the packets hit rule are not distributed to queue 1 without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV6_SCTP passthru/mark
-======================================
+Subcase 2: MAC_IPV4_TUN_IPV4_PAY rss queues
+-------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 end / mark / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are distributed to queue group with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_PAY passthru/mark
-==============================================
+Subcase 3: MAC_IPV4_TUN_IPV4_PAY passthru
+-----------------------------------------
 
 1. create filter rules::
 
     flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions passthru / mark / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_UDP passthru/mark
-==============================================
+Subcase 4: MAC_IPV4_TUN_IPV4_PAY drop
+-------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets dropped.
+   send mismatched packets, check the packets are not dropped.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. check there is no rule listed.
+   verify the packets hit the rule are not dropped.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 5: MAC_IPV4_TUN_IPV4_PAY mark/rss
+-----------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / rss / end
 
-Test case: MAC_IPV4_TUN_IPV4_TCP passthru/mark
-==============================================
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions passthru / mark / end
+4. verify matched packet is redirected to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+Subcase 6: MAC_IPV4_TUN_IPV4_PAY mark
+-------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / end
 
-   check the existing rule.
-   destroy the rule::
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-    testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+Test case: MAC_IPV4_TUN_IPV4_UDP pattern
+========================================
 
-Test case: MAC_IPV4_TUN_IPV4_SCTP passthru/mark
-===============================================
+Subcase 1: MAC_IPV4_TUN_IPV4_UDP queue index
+--------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are distributed to queue 1 with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1180,106 +1189,106 @@ Test case: MAC_IPV4_TUN_IPV4_SCTP passthru/mark
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY passthru/mark
-==================================================
+Subcase 2: MAC_IPV4_TUN_IPV4_UDP rss queues
+-------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions passthru / mark / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss queues 38 39 40 41 end / mark id 1 / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are distributed to queue group with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP passthru/mark
-==================================================
+Subcase 3: MAC_IPV4_TUN_IPV4_UDP passthru
+-----------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions passthru / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify the packets hit rule are distributed to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 4: MAC_IPV4_TUN_IPV4_UDP drop
+-------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / end
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP passthru/mark
-==================================================
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions passthru / mark / end
+4. verify the packets hit rule are received without FDIR matched ID.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+Subcase 5: MAC_IPV4_TUN_IPV4_UDP mark/rss
+-----------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id 1 / rss / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are distributed to the same queue without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP passthru/mark
-===================================================
+Subcase 6: MAC_IPV4_TUN_IPV4_UDP mark
+-------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-3. verify rules can be listed and destroyed::
 
-    testpmd> flow list 0
+Test case: MAC_IPV4_TUN_IPV4_TCP pattern
+========================================
 
-   check the existing rule.
-   destroy the rule::
+1. replace "udp" with "tcp" in all the subcases of MAC_IPV4_TUN_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_TUN_IPV4_UDP pattern.
+3. get the same result.
 
-    testpmd> flow destroy 0 rule 0
+Test case: MAC_IPV4_TUN_IPV4_SCTP pattern
+=========================================
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+1. replace "udp" with "sctp" in all the subcases of MAC_IPV4_TUN_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_TUN_IPV4_UDP pattern.
+3. get the same result.
 
-Test case: MAC_IPV4_PAY mark/rss
-================================
+
+Test case: MAC_IPV4_TUN_MAC_IPV4_PAY pattern
+============================================
+
+Subcase 1: MAC_IPV4_TUN_MAC_IPV4_PAY queue index
+------------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 0 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed to queue 0 without FDIR matched ID.
+   send mismatched packets, check the packets are not distributed to queue 0 without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1290,84 +1299,91 @@ Test case: MAC_IPV4_PAY mark/rss
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packets are redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are not distributed to queue 0 without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_UDP mark/rss
-================================
+Subcase 2: MAC_IPV4_TUN_MAC_IPV4_PAY rss queues
+-----------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions mark / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 0 1 end / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 0.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 0.
+2. send matched packets, check the packets are distributed to queue group without FDIR matched ID.
+   send mismatched packets, check the packets are not distributed to queue group without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify the packets hit rule are not distributed to queue group without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV4_TUN_MAC_IPV4_PAY passthru
+---------------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions passthru / end
 
-Test case: MAC_IPV4_TCP mark/rss
-================================
+2. send matched packets, check the packets are distributed by RSS without FDIR matched ID.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions mark id 1 / rss / end
+4. verify the packets hit rule are distributed to same queue without FDIR matched ID.
+   check there is no rule listed.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+Subcase 4: MAC_IPV4_TUN_MAC_IPV4_PAY drop
+-----------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are not dropped.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are not dropped.
    check there is no rule listed.
 
-Test case: MAC_IPV4_SCTP mark/rss
-=================================
+Subcase 5: MAC_IPV4_TUN_MAC_IPV4_PAY mark/rss
+---------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / rss / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify the packets hit rule are distributed to same queue without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 6: MAC_IPV4_TUN_MAC_IPV4_PAY mark
+-----------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / end
 
-Test case: MAC_IPV6_PAY mark/rss
-================================
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
+
+Test case: MAC_IPV4_TUN_MAC_IPV4_UDP pattern
+============================================
+
+Subcase 1: MAC_IPV4_TUN_MAC_IPV4_UDP queue index
+------------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2 tc is 1 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 15 / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed to queue 15 with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1378,106 +1394,106 @@ Test case: MAC_IPV6_PAY mark/rss
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV6_UDP mark/rss
-================================
+Subcase 2: MAC_IPV4_TUN_MAC_IPV4_UDP rss queues
+-----------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions mark id 1 / rss / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss queues 0 1 2 3 end / mark id 1 / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are distributed to queue group with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV6_TCP mark/rss
-================================
+Subcase 3: MAC_IPV4_TUN_MAC_IPV4_UDP passthru
+---------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions passthru / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 4: MAC_IPV4_TUN_MAC_IPV4_UDP drop
+-----------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / mark id 1 / end
 
-Test case: MAC_IPV6_SCTP mark/rss
-=================================
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions mark id 1 / rss / end
+4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
+   check there is no rule listed.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+Subcase 5: MAC_IPV4_TUN_MAC_IPV4_UDP mark/rss
+---------------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss / mark id 1 / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are distributed to same queue without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_PAY mark/rss
-=========================================
+Subcase 6: MAC_IPV4_TUN_MAC_IPV4_UDP mark
+-----------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 0.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 0.
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-3. verify rules can be listed and destroyed::
 
-    testpmd> flow list 0
+Test case: MAC_IPV4_TUN_MAC_IPV4_TCP pattern
+============================================
 
-   check the existing rule.
-   destroy the rule::
+1. replace "udp" with "tcp" in all the subcases of MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
+3. get the same result.
 
-    testpmd> flow destroy 0 rule 0
+Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP pattern
+=============================================
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+1. replace "udp" with "sctp" in all the subcases of MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
+3. get the same result.
 
-Test case: MAC_IPV4_TUN_IPV4_UDP mark/rss
-=========================================
+Test case: MAC_IPV4_GTPU_EH pattern
+===================================
+
+Subcase 1: MAC_IPV4_GTPU_EH queue index
+---------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed to queue 1 with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are not distributed to queue 1 without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1488,128 +1504,131 @@ Test case: MAC_IPV4_TUN_IPV4_UDP mark/rss
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+4. verify matched packets are not distributed to queue 1 without FDIR matched ID.
+   Then check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_TCP mark/rss
-=========================================
+Subcase 2: MAC_IPV4_GTPU_EH queue group
+---------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions rss queues 0 1 2 3 end / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed to queue group with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are not distributed to queue group without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are not distributed to queue group without FDIR matched ID.
+   Then check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV4_GTPU_EH passthru
+------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions passthru / mark id 1 / end
 
-Test case: MAC_IPV4_TUN_IPV4_SCTP mark/rss
-==========================================
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions mark id 1 / rss / end
+4. verify matched packets are redirected to the same queue without FDIR ID.
+   check there is no rule listed.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+Subcase 4: MAC_IPV4_GTPU_EH drop
+--------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions drop / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are not dropped without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+4. verify matched packets are not dropped without FDIR matched ID.
+   Then check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY mark/rss
-=============================================
+Subcase 5: MAC_IPV4_GTPU_EH mark/rss
+------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions mark id 1 / rss / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are redirected to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 6: MAC_IPV4_GTPU_EH mark
+--------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions mark id 1 / end
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP mark/rss
-=============================================
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-1. create filter rules::
+Subcase 7: MAC_IPV4_GTPU_EH QFI queue index / mark
+--------------------------------------------------
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id 1 / rss / end
+1. create filter rules on port 0::
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / end actions queue index 1 / mark id 3 / end
 
-3. verify rules can be listed and destroyed::
+2. send matched packets, check the packet is redirected to queue 1 with FDIR matched ID=0x3::
 
-    testpmd> flow list 0
+    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/TCP()/Raw('x'*20)
 
-   check the existing rule.
-   destroy the rule::
+   send mismatched packets, check the packet received has not FDIR::
 
-    testpmd> flow destroy 0 rule 0
+    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+3. repeat step 3 of subcase 1.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP mark/rss
-=============================================
+4. verify matched packet received has not FDIR.
+   Then check there is no rule listed.
 
-1. create filter rules::
+Subcase 8: MAC_IPV4_GTPU_EH without QFI rss queues / mark
+---------------------------------------------------------
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions mark id 1 / rss / end
+1. create filter rules on port 0::
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc / end actions rss queues 2 3 end / mark id 1 / end
 
-3. verify rules can be listed and destroyed::
+2. send matched packets, check the packet is distributed to queue 2 or queue 3 with FDIR matched ID=0x3::
 
-    testpmd> flow list 0
+    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP()/Raw('x'*20)
 
-   check the existing rule.
-   destroy the rule::
+   send mismatched packets, check the packet received has no FDIR::
 
-    testpmd> flow destroy 0 rule 0
+    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP()/Raw('x'*20)
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packet received has not FDIR.
+   Then check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP mark/rss
-==============================================
+Test case: MAC_IPV4_GTPU pattern
+================================
+
+Subcase 1: MAC_IPV4_GTPU queue index
+------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions queue index 1 / mark / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed to queue 1 with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are not distributed to queue 1 without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1620,1263 +1639,399 @@ Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP mark/rss
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+4. verify matched packets are not distributed to queue 1 without FDIR matched ID.
+   Then check there is no rule listed.
 
-Test case: mark/rss wrong parameters
-====================================
+Subcase 2: MAC_IPV4_GTPU queue group
+------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions rss queues 0 1 end / mark / end
 
-2. The rule failed to be created, report proper error message.
+2. send matched packets, check the packets are distributed to queue group with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are not distributed to queue group without FDIR matched ID.
 
-3. list the flow::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
-
-   there is no flow listed.
+4. verify matched packets are not distributed to queue group without FDIR matched ID.
+   Then check there is no rule listed.
 
-Test case: MAC_IPV4_PAY drop
-============================
+Subcase 3: MAC_IPV4_GTPU passthru
+---------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions drop / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions passthru / mark / end
 
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are distributed to same queue without FDIR matched ID.
+   Then check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 4: MAC_IPV4_GTPU drop
+-----------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   check there is no rule listed.
-   verify matched packets are not dropped.
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions drop / end
 
-Test case: MAC_IPV4_UDP drop
-============================
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are not dropped.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions drop / end
+4. verify matched packets are not dropped without FDIR matched ID.
+   Then check there is no rule listed.
 
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
+Subcase 5: MAC_IPV4_GTPU mark/rss
+---------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions mark / rss / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
+4. verify matched packets are distributed to same queue without FDIR matched ID.
+   Then check there is no rule listed.
 
-Test case: MAC_IPV4_TCP drop
-============================
+Subcase 6: MAC_IPV4_GTPU mark
+-----------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions drop / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions mark / end
 
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-3. verify rules can be listed and destroyed::
 
-    testpmd> flow list 0
+Test case: negative cases
+=========================
 
-   check the existing rule.
-   destroy the rule::
+Subcase 1: invalid parameters of queue index
+--------------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. Invalid parameters::
 
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 64 / end
 
-Test case: MAC_IPV4_SCTP drop
-=============================
+   Failed to create flow, report message::
 
-1. create filter rules::
+    Invalid queue for FDIR.: Invalid argument
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 / end actions drop / end
+2. check there is no rule listed.
 
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
+Subcase 2: invalid parameters of rss queues
+-------------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. Invalid number of queues::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 1 2 3 end / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 0 end / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues end / end
 
-   check the existing rule.
-   destroy the rule::
+   Failed to create flow, report message::
 
-    testpmd> flow destroy 0 rule 0
+    Invalid input action: Invalid argument
 
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
+2. Discontinuous queues::
 
-Test case: MAC_IPV6_PAY drop
-============================
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 1 2 3 5 end / end
 
-1. create filter rules::
+   Failed to create flow, report message::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2 tc is 1 \
-    / end actions drop / end
+    Discontinuous queue region: Invalid argument
 
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
+3. invalid queue index::
 
-3. verify rules can be listed and destroyed::
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 63 64 end / end
 
-    testpmd> flow list 0
+   Failed to create flow, report message::
 
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
-
-Test case: MAC_IPV6_UDP drop
-============================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
-
-Test case: MAC_IPV6_TCP drop
-============================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
-
-Test case: MAC_IPV6_SCTP drop
-=============================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
-
-Test case: MAC_IPV4_TUN_IPV4_PAY drop
-=====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_IPV4_UDP drop
-=====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_IPV4_TCP drop
-=====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_IPV4_SCTP drop
-======================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY drop
-=========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP drop
-=========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP drop
-=========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP drop
-==========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_PAY queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 0 1 end / end
-
-2. send matched packets, check the packets are distributed to queue 0 or 1.
-   send mismatched packets, check the packets are not distributed to queue 0 or 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify pkt1 and pkt2 are not distributed to queue 0 or 1.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_UDP queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions rss queues 1 2 3 4 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TCP queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions rss queues 56 57 58 59 60 61 62 63 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_SCTP queue group
-====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1 / end actions rss queues 0 1 2 3 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV6_PAY queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2 tc is 1 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV6_UDP queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV6_TCP queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV6_SCTP queue group
-====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_IPV4_PAY queue group
-============================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_IPV4_UDP queue group
-============================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss queues 38 39 40 41 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_IPV4_TCP queue group
-============================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_IPV4_SCTP queue group
-=============================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY queue group
-================================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP queue group
-================================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP queue group
-================================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP queue group
-=================================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: queue group wrong parameters
-=======================================
-
-1. invalid number of queues::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 0 1 2 end / end
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 0 end / end
-
-2. Discontinuous queues::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 1 2 3 5 end / end
-
-3. invalid queue index::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 63 64 end / end
-
-4. "--rxq=32 --txq=32", set queue group 64 queues::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions rss queues 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 end / end
-
-all the above five rules are failed to created.
-
-5. "--rxq=64 --txq=64", set queue group 64 queues,
-   create the 64 queues flow successfully.
-   send matched packets, check the packets are distributed to queue 0-63.
-   send mismatched packets, check the packets are distributed to queue 0-63 too.
-
-Test case: MAC_IPV4_GTPU_EH queue index
-=======================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / end
-
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are not distributed to queue 1.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU_EH passthru/mark
-=========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions passthru / mark / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are redirected to the same queue without FDIR ID.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU_EH mark/rss
-====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions mark id 1 / rss / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are redirected to the same queue without FDIR ID.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU_EH drop
-================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions drop / end
-
-2. send matched packets, check the packets are dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are not dropped.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU_EH queue group
-=======================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions rss queues 0 1 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are not distributed to queue group.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU queue index
-====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions queue index 1 / end
-
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are not distributed to queue 1.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU passthru/mark
-======================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions passthru / mark / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are redirected to the same queue without FDIR ID.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU mark/rss
-=================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions mark id 1 / rss / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are redirected to the same queue without FDIR ID.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU drop
-=============================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions drop / end
-
-2. send matched packets, check the packets are dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
+    Invalid queue region indexes.: Invalid argument
 
-   check the existing rule.
-   destroy the rule::
+4. "--rxq=7 --txq=7", set queue group 8 queues::
 
-    testpmd> flow destroy 0 rule 0
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions rss queues 0 1 2 3 4 5 6 7 end / end
 
-   verify matched packets are not dropped.
-   Then check there is no rule listed.
+   Failed to create flow, report message::
 
-Test case: MAC_IPV4_GTPU queue group
-====================================
+    Invalid queue region indexes.: Invalid argument
 
-1. create filter rules::
+5. check there is no rule listed.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions rss queues 0 1 end / end
+6. "--rxq=8 --txq=8", set queue group 8 queues,
+   create the 8 queues flow successfully.
+   send matched packets, check the packets are distributed to queue 0-7.
+   send mismatched packets, check the packets are distributed to queue 0-7 too.
 
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
+Subcase 3: Invalid parameters of input set
+------------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. Invalid value of teid and qfi::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x100 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / gtp_psc qfi is 0x5 / end actions queue index 2 / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / end actions queue index 1 / end
 
-   check the existing rule.
-   destroy the rule::
+   Failed to create flow, report message "Bad arguments"
 
-    testpmd> flow destroy 0 rule 0
+2. check there is no rule listed.
 
-   verify matched packets are not distributed to queue group.
-   Then check there is no rule listed.
+Subcase 4: Invalid parameters of mark ID
+----------------------------------------
 
-Test case: MAC_IPV4_GTPU_EH mark/count/query
-============================================
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 2 / mark id 2 / count / end
-
-2. send matched packets, check the packets are distributed to queue 2, the FDIR=0x2.
-   send mismatched packets, check the packets are not distributed to queue 2, no FDIR.
-   check the count number::
-
-    flow query 0 0 count
-    count:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are not distributed to queue 2, and no FDIR.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU mark/count/query
-=========================================
-
-1. create filter rules on port 1::
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 / end actions queue index 1 / mark id 4294967296 / end
 
-    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions rss queues 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 end / mark id 100 / count / end
+   Failed to create flow, report message "Bad arguments"
 
-2. send matched packets, check the packets are distributed to queue in 0-63, the FDIR=0x64::
+2. check there is no rule listed.
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)
+Subcase 5: Duplicated rules
+---------------------------
 
-   send mismatched packets, check the packets have not FDIR::
+1. Create a FDIR rule::
 
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/IP()/Raw('x'*20)
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 1 / end
 
-   check the count number::
+   the rule is created successfully.
 
-    flow query 1 0 count
-    count:
-     hits_set: 1
-     bytes_set: 0
-     hits: 2
-     bytes: 0
+2. Create the same rule again, Failed to create flow, report message::
 
-3. verify rules can be listed and destroyed::
+    Rule already exists!: File exists
 
-    testpmd> flow list 1
+3. check there is only one rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 6: conflicted rules
+---------------------------
 
-    testpmd> flow destroy 1 rule 0
+1. Create a FDIR rule::
 
-   verify matched packets are distributed to queue in 0-63, and no FDIR.
-   Then check there is no rule listed.
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 1 / end
 
-Test case: MAC_IPV4_GTPU_EH QFI mark/count/query
-================================================
+   the rule is created successfully.
 
-1. create filter rules on port 1::
+2. Create a rule with same input set but different action::
 
-    flow create 1 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / end actions drop / mark id 3 / count / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 2 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions drop / end
 
-2. send matched packets, check the packets are dropped::
+   Failed to create the two flows, report message::
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/TCP()/Raw('x'*20)
+    Rule already exists!: File exists
 
-   send mismatched packets, check the packets are not dropped, no FDIR::
+3. check there is only one rule listed.
 
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
+Subcase 7: conflicted actions
+-----------------------------
 
-   check the count number::
+1. Create a rule with two conflicted actions::
 
-    flow query 1 0 count
-    count:
-     hits_set: 1
-     bytes_set: 0
-     hits: 1
-     bytes: 0
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 1 / rss queues 2 3 end / end
 
-3. verify rules can be listed and destroyed::
+   Failed to create flow, report message::
 
-    testpmd> flow list 1
+    Invalid input action: Invalid argument
 
-   check the existing rule.
-   destroy the rule::
+2. check there is no rule listed.
 
-    testpmd> flow destroy 1 rule 0
+Subcase 8: void action
+----------------------
 
-   verify matched packets are not dropped, and no FDIR.
-   Then check there is no rule listed.
+1. Create a rule with void action::
 
-Test case: MAC_IPV4_GTPU_EH without QFI mark/count/query
-========================================================
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions end
 
-1. create filter rules on port 0::
+   Failed to create flow, report message::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc / end actions queue index 15 / mark id 3 / count / end
+    Invalid input action: Invalid argument
 
-2. send matched packets, check the packets are distributed to queue 15, the FDIR=0x3::
+2. check there is no rule listed.
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP()/Raw('x'*20)
+Subcase 9: unsupported action
+-----------------------------
 
-   send mismatched packets, check the packets are not distributed to queue 15, no FDIR::
+1. Create a rule with count action only::
 
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP()/Raw('x'*20)
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions count / end
 
-   check the count number::
+   Failed to create flow, report message::
 
-    flow query 0 0 count
-    count:
-     hits_set: 1
-     bytes_set: 0
-     hits: 1
-     bytes: 0
+    Invalid input action: Invalid argument
 
-3. verify rules can be listed and destroyed::
+2. check there is no rule listed.
 
-    testpmd> flow list 0
+Subcase 10: delete a non-existent rule
+--------------------------------------
 
-   check the existing rule.
-   destroy the rule::
+1. show the rule list of port 0::
 
-    testpmd> flow destroy 0 rule 0
+    flow list 0
 
-   verify matched packets are not distributed to queue 15, and no FDIR.
-   Then check there is no rule listed.
+   There is no rule listed.
 
-Test case: MAC_IPV4_GTPU_EH multirules
-======================================
+2. destroy rule 0 of port 0::
 
-1. create filter rules on port 0::
+    flow destroy 0 rule 0
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / end
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x35 / end actions queue index 2 / end
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 / gtp_psc qfi is 0x35 / end actions queue index 3 / end
+   There is no error message reported.
 
-   the three rules are created successfully.
-   then create the following rules::
+3. check there is no rule listed.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 / gtp_psc qfi is 0x35 / end actions queue index 3 / end
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 / gtp_psc qfi is 0x35 / end actions queue index 4 / end
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 / gtp_psc qfi is 0x75 / end actions queue index 4 / end
+4. flush rules of port 0::
 
-   the three rules are failed to created.
-   then create the following rule::
+    flow flush 0
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 / gtp_psc qfi is 0x34 / end actions queue index 3 / end
+   There is no error message reported.
 
-   the rule is created successfully.
+5. check there is no rule listed.
 
-2. send matched packets::
+Subcase 11: unsupported input set field
+---------------------------------------
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
-    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
-    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
+1. Create a IPV4_PAY rule with TC input set::
 
-   check the packets, p_gtpu1 to queue 1, p_gtpu2 to queue 3, p_gtpu3 to queue 2, p_gtpu4 to queue 3.
-   send mismatched packets, check the packets are not distributed to queue 1-3::
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 tc is 2 / end actions queue index 1 / end
 
-    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x36)/IP()/Raw('x'*20)
+   Failed to create flow, report message::
 
-3. verify rules can be listed and destroyed::
+    Bad arguments
 
-    testpmd> flow list 0
+2. check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 12: invalid port
+------------------------
 
-    testpmd> flow flush 0
+1. Create a rule on port 2::
 
-   verify matched packets are not distributed to same queue.
-   Then check there is no rule listed.
+    flow create 2 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
 
-Test case: MAC_IPV4_GTPU_EH two ports
-=====================================
+   Failed to create flow, report message::
 
-1. create filter rules on two ports::
+    No such device: No such device
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / end
-    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / end
+2. check there is no rule listed on port 2::
 
-   send matched packets::
+    testpmd> flow list 2
+    Invalid port 2
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
+Subcase 13: unsupported pattern
+-------------------------------
 
-   send the packet to two ports, both are distributed to queue 1.
+1. Create a GTPU rule with OS default package::
 
-2. create filter rules on two ports::
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions drop / end
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x35 / end actions queue index 2 / end
-    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x35 / end actions queue index 3 / end
+   Failed to create flow, report error message.
 
-   send matched packets::
+2. check there is no rule listed.
 
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
+Subcase 14: conflict patterns
+-----------------------------
 
-   send the packet to two ports, both are distributed to expected queue.
+Note: MAC_IPV4_UDP packet can match MAC_IPV4_PAY rule if ip address can match.
+so if there is a MAC_IPV4_PAY rule existing,
+MAC_IPV4_UDP rule will be set to switch rule.
+set "--log-level=ice,7", then check::
 
-3. flush the rules::
+    ice_flow_create(): Succeeded to create (1) flow -> FDIR
+    ice_flow_create(): Succeeded to create (2) flow -> switch
 
-    flow flush 0
-    flow flush 1
+1. set MAC_IPV4_PAY rule firstly::
 
-4. create filter rules on two ports::
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions queue index 1 / end
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / end
-    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions queue index 2 / end
+   the first flow rule is set to fdir filter, send matched packet::
 
-   send matched packets::
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/Raw('x' * 80)],iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
 
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
-    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
+   the two packets are both redirected to queue 1.
+   then create MAC_IPV4_UDP flow, it is set to switch filter::
 
-   send the packets to two ports,
-   p_gtpu2 is not distributed to queue 1 of port 0, it is distributed to queue 2 of port 1.
-   p_gtpu3 is distributed to queue 2 of port 1, it is distributed to queue 1 of port 0.
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 2 / end
 
-5. verify rules can be listed and destroyed::
+   send same packets, MAC_IPV4_PAY packet to queue 1, MAC_IPV4_UDP packet to queue 2.
 
-    testpmd> flow list 0
-    testpmd> flow list 1
+2. flush the rules.
 
-   check the existing rules.
-   destroy the rule::
+3. set MAC_IPV4_UDP rule firstly::
 
-    testpmd> flow destroy 0 rule 0
-    testpmd> flow destroy 1 rule 0
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 2 / end
 
-   verify matched packets are not distributed to expected queue.
-   Then check there is no rule listed.
+   the first rule is set to fdir filter, send matched packet::
 
-Test case: MAC_IPV4_GTPU_EH wrong parameters
-============================================
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
 
-1. create filter rules on port 0::
+   the packet is redirected to queue 2.
+   then create MAC_IPV4_PAY rule, it is set to switch filter::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x100 / end actions queue index 1 / end
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / gtp_psc qfi is 0x5 / end actions queue index 2 / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions queue index 1 / end
 
-   the two flows can not be created successfully, report proper error message.
+   send same packet, it is redirected to queue 1, because the packet match switch filter first.
 
-2. list the flow::
 
-    testpmd> flow list 0
+Test case: count/query
+======================
 
-   there is no flow listed.
+Subcase 1: count for 1 rule of 1 port
+-------------------------------------
 
-Test case: MAC_IPV4_GTPU wrong parameters
-=========================================
+1. create filter rules::
 
-1. create filter rules on port 0::
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / count / end
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / end actions queue index 1 / end
+2. send matched packets, check the packets are redirected to queue 1.
+   send mismatched packets, check the packets are redirected by RSS.
+   check the count number::
 
-   the flow can not be created successfully.
+    flow query 0 0 count
+    count:
+     hits_set: 1
+     bytes_set: 0
+     hits: 2
+     bytes: 0
 
-2. list the flow::
+3. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   there is no flow listed.
+   check the existing rule.
+   destroy the rule::
+
+    testpmd> flow destroy 0 rule 0
+
+   verify matched packets are redirected by RSS.
+   check there is no rule listed.
+
+4.  check the count number::
 
-Test case: count query identifier share
-=======================================
+     testpmd> flow query 0 0 count
+     Flow rule #0 not found
+
+Subcase 2: count query identifier share
+---------------------------------------
 
 1. create filter rules::
 
     flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 / end actions queue index 1 / count identifier 0x1234 shared on / end
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions queue index 2 / count identifier 0x1234 shared on / end
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 / end actions queue index 3 / count identifier 0x1234 shared off / end
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.4 / end actions queue index 4 / count identifier 0x1234 / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions rss queues 2 3 end / count identifier 0x1234 shared on / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 / end actions passthru / mark / count identifier 0x1234 shared off / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.4 / end actions mark id 1 / rss / count identifier 0x1234 / end
     flow create 0 ingress pattern eth / ipv4 src is 192.168.0.5 / end actions queue index 5 / count shared on / end
     flow create 0 ingress pattern eth / ipv4 src is 192.168.0.6 / end actions drop / count shared on / end
     flow create 0 ingress pattern eth / ipv4 src is 192.168.0.7 / end actions drop / count identifier 0x1235 shared on / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.8 / end actions rss / count / end
 
 2. send matched packets::
 
@@ -2887,10 +2042,15 @@ Test case: count query identifier share
     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.5",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.6",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.8",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
 
    check the packets,
-   packet 1 to queue 1, packet 2 to queue 2, packet 3 to queue 3, packet 4 to queue 4, packet 5 to queue 5,
+   packet 1 to queue 1, packet 2 to queue 2 or queue 3,
+   packet 3 is distributed by RSS with FDIR matched ID=0x0,
+   packet 4 is distributed by RSS with FDIR matched ID=0x1,
+   packet 5 to queue 5,
    packet 6 dropped, packet 7 dropped.
+   packet 8 is distributed by RSS.
 
 3. query count::
 
@@ -2936,6 +2096,12 @@ Test case: count query identifier share
      bytes_set: 0
      hits: 10
      bytes: 0
+    testpmd> flow query 0 7 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+     bytes: 0
 
 4. verify rules can be listed and destroyed::
 
@@ -2946,21 +2112,23 @@ Test case: count query identifier share
 
     testpmd> flow flush 0
 
-   verify matched packet are not distributed to same queue.
-   check there is no rule listed.
+5. check there is no rule listed,
+   send matched packets, query count, flow rule not found.
 
-Test case: multi patterns count query
-=====================================
+Subcase 3: multi patterns mark count query
+------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / count / end
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / count / end
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions rss queues 62 63 end / count / end
-    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queue index 1 / count / end
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 3 / count / end
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 / tcp dst is 23 / end actions queue index 4 / count / end
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 5 / count / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 0 / count / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / mark id 1 / count / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions rss queues 62 63 end / mark id 2 / count / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queue index 1 / mark id 3 / count / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 3 / mark id 4 / count / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 / tcp dst is 23 / end actions queue index 4 / count / mark id 5 / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 5 / mark id 6 / count / end
+    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions rss queues 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 \
+    32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 end / mark id 100 / count / end
 
 2. send matched packets::
 
@@ -2971,10 +2139,12 @@ Test case: multi patterns count query
     sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP(dport=4790)/VXLAN(flags=0xc)/IP(dst="192.168.0.21", src="192.168.0.20")/UDP(sport=22,dport=23)/("X"*480)], iface="enp175s0f0", count=10)
     sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=2)/Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20")/TCP(dport=23)/("X"*480)], iface="enp175s0f0", count=10)
     sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=2)/Ether()/IP(src='192.168.0.20', dst='192.168.0.21')/SCTP(sport=22,dport=23)/("X"*480)], iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)], iface="enp175s0f0", count=10)
 
    check the packets,
    packet 1 to queue 1, packet 2 dropped, packet 3 to queue 62-63, packet 4 to queue 1, packet 5 to queue 3,
-   packet 6 to queue 4, packet 7 to queue 5.
+   packet 6 to queue 4, packet 7 to queue 5, packet 8 is distributed by RSS.
+   all the packets are received with FDIR matched ID.
 
 3. query count::
 
@@ -3020,630 +2190,423 @@ Test case: multi patterns count query
      bytes_set: 0
      hits: 10
      bytes: 0
+    testpmd> flow query 0 7 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+     bytes: 0
 
-4. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   There are 7 rules listed.
-   destroy the rule 0::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packet matching rule 0 is not distributed to queue 1.
-   check rule 1-6 listed.
-
-5. destroy the rule 6::
-
-    testpmd> flow destroy 0 rule 6
-
-   verify the packet matching rule 6 is not distributed to queue 5.
-   check rule 1-5 listed.
-
-6. destroy the rule 3::
-
-    testpmd> flow destroy 0 rule 3
-
-   verify the packet matching rule 3 is not distributed to queue 1.
-   check rule 1/2/4/5 listed.
-
-7. flush the all the rules::
-
-    testpmd> flow flush 0
-
-   verify the matched packets are not distributed to the same queue.
-   check no rule listed.
-
-Test case: two ports multi patterns count query
-===============================================
-
-1. create filter rules::
-
-    flow create 1 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 255  tos is 4 / end actions queue index 1 / count / end
-    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions rss queues 6 7 end / count / end
-    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions rss queues 6 7 end / count / end
-    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions queue index 2 / count / end
-    flow create 1 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / count / end
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 tos is 4 / tcp src is 22 dst is 23 / end actions drop / count / end
-    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queue index 1 / count / end
-
-2. send matched packets::
-
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=255, ttl=2, tos=4) / Raw('x' * 80)],iface="enp175s0f1", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/SCTP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/UDP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/TCP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN()/Ether()/IP(src='192.168.0.20', dst='192.168.0.21')/("X"*480)], iface="enp175s0f1", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2, tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f0", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", nh=0, tc=1, hlim=2)/("X"*480)], iface="enp175s0f0", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2, tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f1", count=10)
-
-   check the packets,
-   packet 1 to queue 1 of port 1, packet 2 to queue 6-7 of port 1, packet 3 to queue 6-7 of port 1,
-   packet 4 to queue 2 of port 1, packet 5 dropped of port 1,
-   packet 6 to dropped of port 0, packet 7 to queue 1 of port 0.
-   packet 8 received by port 1.
-
-3. query count::
-
-    testpmd> flow query 1 0 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-    testpmd> flow query 1 1 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-    testpmd> flow query 1 2 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-    testpmd> flow query 1 3 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-    testpmd> flow query 1 4 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-    testpmd> flow query 0 0 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-    testpmd> flow query 0 1 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-
-4. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-    testpmd> flow list 1
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow flush 0
-    testpmd> flow flush 1
-
-   verify matched packet are not distributed to same queue.
-   check there is no rule listed::
-
-    testpmd> flow list 0
-    testpmd> flow list 1
-
-Test case: max count
-====================
-
-1. create 257 flows with count::
-
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 / end actions drop / count / end
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions drop / count / end
-    ……
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 / end actions drop / count / end
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.2 / end actions drop / count / end
-
-   the last one failed to create.
-
-2. send matched packets::
-
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
-
-   check the packet dropped.
-
-3. query count::
-
-    testpmd> flow query 0 255 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-
-4. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow flush 0
-
-   verify matched packet are not dropped.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_PAY queue index mark
-========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / mark id 0 / end
-
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x0" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_UDP queue index mark
-========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions queue index 0 / mark id 1 / end
-
-2. send 1 matched packet, check the packets are distributed to queue 0 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 0 without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_TCP queue index mark
-========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 4294967294 / end
-
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0xfffffffe" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
+4. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
    check the existing rule.
    destroy the rule::
 
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_SCTP drop mark
-==================================
-
-1. create filter rules::
+    testpmd> flow flush 0
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1 / end actions drop / mark id 1 / end
+5. check there is no rule listed,
+   send matched packets, query count, flow rule not found.
 
-2. send 1 matched packet, check the packets are dropped.
-   send 1 mismatched packet, check the packets are not dropped without "FDIR matched" printed.
+Subcase 4: max count number
+---------------------------
 
-3. verify rules can be listed and destroyed::
+1. create 257 flows with count::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 / end actions drop / count / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions drop / count / end
+    ……
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.255 / end actions drop / count / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 / end actions drop / count / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.2 / end actions drop / count / end
 
-   check the existing rule.
-   destroy the rule::
+   the last one failed to create, report the error message::
 
-    testpmd> flow destroy 0 rule 0
+    No free counter found
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+2. send matched packets::
 
-Test case: MAC_IPV6_PAY queue index mark
-========================================
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
 
-1. create filter rules::
+   check the packet dropped.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2 tc is 1 / end actions queue index 1 / mark id 1 / end
+3. query count::
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+    testpmd> flow query 0 255 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+     bytes: 0
 
-3. verify rules can be listed and destroyed::
+4. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   check the existing rule.
+   check that 256 rules listed.
    destroy the rule::
 
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV6_UDP queue index mark
-========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
-
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
+    testpmd> flow flush 0
 
-    testpmd> flow list 0
+   verify matched packet are not dropped.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Test case: two ports
+====================
 
-    testpmd> flow destroy 0 rule 0
+Subcase 1: same rule on two ports
+---------------------------------
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+1. create filter rules on two ports::
 
-Test case: MAC_IPV6_TCP queue index mark
-========================================
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / mark / end
+    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / mark / end
 
-1. create filter rules::
+   send matched packets::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152) \
+    /GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+   send the packet to two ports, both are distributed to queue 1 with FDIR matched ID=0x0.
 
-3. verify rules can be listed and destroyed::
+2. list the rules on two ports::
 
     testpmd> flow list 0
+    ID      Group   Prio    Attr    Rule
+    0       0       0       i--     ETH IPV4 UDP GTPU GTP_PSC => QUEUE MARK
+    testpmd> flow list 1
+    ID      Group   Prio    Attr    Rule
+    0       0       0       i--     ETH IPV4 UDP GTPU GTP_PSC => QUEUE MARK
 
-   check the existing rule.
-   destroy the rule::
+3. destroy rule 0 on port 0::
 
     testpmd> flow destroy 0 rule 0
+    Flow rule #0 destroyed
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV6_SCTP queue index mark
-=========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
-
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
+   list the rules on two ports::
 
     testpmd> flow list 0
+    testpmd> flow list 1
+    ID      Group   Prio    Attr    Rule
+    0       0       0       i--     ETH IPV4 UDP GTPU GTP_PSC => QUEUE MARK
 
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_IPV4_PAY queue index mark
-=================================================
-
-1. create filter rules::
+4. send the matched packet to port 0, it is redirected by RSS without FDIR matched ID.
+   send the matched packet to port 1, it is still redirected to queue 1 with FDIR matched ID=0x0.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark id 1 / end
+5. destroy rule 0 on port 1::
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+    testpmd> flow destroy 1 rule 0
+    Flow rule #0 destroyed
 
-3. verify rules can be listed and destroyed::
+   list the rules on two ports::
 
     testpmd> flow list 0
+    testpmd> flow list 1
 
-   check the existing rule.
-   destroy the rule::
+   there is no rule listed on both ports.
+   send the matched packet to port 0/1, it is redirected by RSS without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+Subcase 2: same input set, different actions on two ports
+---------------------------------------------------------
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+1. create filter rules on two ports::
 
-Test case: MAC_IPV4_TUN_IPV4_UDP queue group mark
-=================================================
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+    flow create 1 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 2 3 end / mark id 1 / end
 
-1. create filter rules::
+   send matched packets to two ports::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss queues 1 2 end / mark id 1 / end
+    pkt = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/TCP(sport=22,dport=23)/Raw('x' * 80)
 
-2. send 1 matched packet, check the packets are distributed to queue 1-2 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1-2 without "FDIR matched" printed.
+   the packet sent to port 0 is redirected to queue 1 with FDIR matched ID=0x1,
+   the packet sent to port 1 is redirected to queue 2 or queue 3 with FDIR matched ID=0x1.
 
-3. verify rules can be listed and destroyed::
+2. destroy rule 0 on both ports::
 
-    testpmd> flow list 0
+    testpmd> flow flush 0
+    testpmd> flow flush 1
 
-   check the existing rule.
-   destroy the rule::
+   list the rules on two ports::
 
-    testpmd> flow destroy 0 rule 0
+    testpmd> flow list 0
+    testpmd> flow list 1
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+   there is no rule listed on both ports.
+   send the matched packet to port 0/1, it is redirected by RSS without FDIR matched ID.
 
-Test case: MAC_IPV4_TUN_IPV4_TCP drop mark
-==========================================
+Subcase 3: two ports multi patterns count query
+-----------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions drop / mark id 1 / end
-
-2. send 1 matched packet, check the packets are dropped.
-   send 1 mismatched packet, check the packets are not dropped without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
+    flow create 1 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 255  tos is 4 / end actions queue index 1 / mark id 1 / count identifier 0x1234 shared on / end
+    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions rss queues 6 7 end / mark id 2 / count identifier 0x1234 shared on / end
+    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions rss queues 6 7 end / mark id 1 / count / end
+    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions queue index 2 / mark / count / end
+    flow create 1 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / count / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 tos is 4 / tcp src is 22 dst is 23 / end actions drop / count / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queue index 1 / mark id 1 / count identifier 0x1234 shared on / end
 
-   verify matched packets are dropped without "FDIR matched" printed.
-   Then check there is no rule listed.
+2. send matched packets::
 
-Test case: MAC_IPV4_TUN_IPV4_SCTP queue index mark
-==================================================
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=255, ttl=2, tos=4) / Raw('x' * 80)],iface="enp175s0f1", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/SCTP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/UDP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/TCP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN()/Ether()/IP(src='192.168.0.20', dst='192.168.0.21')/("X"*480)], iface="enp175s0f1", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2, tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", nh=0, tc=1, hlim=2)/("X"*480)], iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2, tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f1", count=10)
 
-1. create filter rules::
+   check the packets,
+   packet 1 to queue 1 of port 1, packet 2 to queue 6-7 of port 1, packet 3 to queue 6-7 of port 1,
+   packet 4 to queue 2 of port 1, packet 5 dropped of port 1,
+   packet 6 to dropped of port 0, packet 7 to queue 1 of port 0.
+   packet 8 received by port 1.
+   all the received packets have specified FDIR matched ID.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+3. query count::
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+    testpmd> flow query 1 0 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 20
+     bytes: 0
+    testpmd> flow query 1 1 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 20
+     bytes: 0
+    testpmd> flow query 1 2 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+    testpmd> flow query 1 3 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+     bytes: 0
+    testpmd> flow query 1 4 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+     bytes: 0
+    testpmd> flow query 0 0 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+    testpmd> flow query 0 1 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
 
-3. verify rules can be listed and destroyed::
+4. verify rules can be listed correctly::
 
     testpmd> flow list 0
+    testpmd> flow list 1
 
-   check the existing rule.
-   destroy the rule::
+5. destroy the rule::
 
-    testpmd> flow destroy 0 rule 0
+    testpmd> flow flush 0
+    testpmd> flow flush 1
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+   verify matched packet are received without FDIR matched ID.
+   check there is no rule listed::
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY queue index mark
-=====================================================
+    testpmd> flow list 0
+    testpmd> flow list 1
 
-1. create filter rules::
+   query the count number, all reported::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark id 1 / end
+    Flow rule #[ID] not found
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+Test case: Stress test
+======================
 
-3. verify rules can be listed and destroyed::
+Subcase 1: port stop/port start/port reset
+------------------------------------------
 
-    testpmd> flow list 0
+1. create a rule::
 
-   check the existing rule.
-   destroy the rule::
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark / end
 
-    testpmd> flow destroy 0 rule 0
+2. list the rule and send matched packet::
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0")
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP queue index mark
-=====================================================
+   check the packet are redirected to queue 1 with FDIR matched ID=0x0
 
-1. create filter rules::
+3. stop the port, then start the port::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+    testpmd> port stop 0
+    testpmd> port start 0
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+4. show the rule list, the rule is still there.
 
-3. verify rules can be listed and destroyed::
+5. verify matched packet can be still redirected to queue 1 with FDIR matched ID=0x0.
 
-    testpmd> flow list 0
+6. reset pf::
 
-   check the existing rule.
-   destroy the rule::
+    testpmd> port stop 0
+    testpmd> port reset 0
+    testpmd> port start 0
 
-    testpmd> flow destroy 0 rule 0
+7. show the rule list, the rule is still there.
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+8. verify matched packet can be still redirected to queue 1 with FDIR matched ID=0x0.
 
+Subcase 2: add/delete rules
+---------------------------
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP queue index mark
-=====================================================
+1. create two rules::
 
-1. create filter rules::
+    flow create 0 ingress pattern eth / ipv4 proto is 255 / end actions queue index 1 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 2 3 end / mark id 1 / end
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+   return the message::
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+    Flow rule #0 created
+    Flow rule #1 created
 
-3. verify rules can be listed and destroyed::
+   list the rules::
 
     testpmd> flow list 0
+    ID      Group   Prio    Attr    Rule
+    0       0       0       i--     ETH IPV4 => QUEUE MARK
+    1       0       0       i--     ETH IPV4 TCP => RSS MARK
 
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP queue index mark
-======================================================
+2. delete the rules::
 
-1. create filter rules::
+    testpmd> flow flush 0
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+3. repeate the create and delete operations in step1-2 15360 times.
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+4. create the two rules one more time, check the rules listed.
 
-3. verify rules can be listed and destroyed::
+5. send matched packet::
 
-    testpmd> flow list 0
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=255)/Raw('x' * 80)],iface="enp175s0f0")
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/TCP(sport=22,dport=23)/Raw('x' * 80)],iface="enp175s0f0")
 
-   check the existing rule.
-   destroy the rule::
+   check packet 1 is redirected to queue 1 with FDIR matched ID=0x0
+   check packet 2 is redirected to queue 2 or queue 3 with FDIR matched ID=0x1
 
-    testpmd> flow destroy 0 rule 0
+Subcase 3: delete rules
+-----------------------
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+1. create 3 rules and destory the first rule::
 
-Test case: multirules mark
-==========================
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 24 / end actions queue index 2 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 25 / end actions queue index 3 / mark / end
 
-1. create filter rules::
+   there are rule 0/1/2 listed::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 2 / mark id 1 / end
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 / end actions queue index 1 / mark id 2 / count / end
+    flow list 0
 
-2. send matched packet::
+   send packets match rule 0, rule 1 and rule 2,
+   Verify all packets can be redirected to expected queue and mark.
+   destory the first rule::
 
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)],iface="enp175s0f0")
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /TCP(sport=22,dport=23)/Raw('x' * 80)],iface="enp175s0f0")
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /SCTP(sport=22,dport=23)/Raw('x' * 80)],iface="enp175s0f0")
+    flow destroy 0 rule 0
 
-   check packet 1 to queue 1 with "FDIR matched ID=0x1" printed.
-   packet 2 to queue 2 with "FDIR matched ID=0x1" printed.
-   packet 3 to queue 1 with "FDIR matched ID=0x2" printed.
+   list the rules, verify there are only rule 1 and rule 2 listed.
+   send packet matched rule 0, verify it is received without FDIR matched ID.
+   send packets matched rule 1 and rule 2, Verify all packets be redirected and mark.
+   flush rules::
 
-3. query count::
+    flow flush 0
 
-    testpmd> flow query 0 2 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 1
-     bytes: 0
+   send packets match rule 0, rule 1 and rule 2, verify all packets can not mark.
 
-4. verify rules can be listed and destroyed::
+2. create 3 rules and destory the second rule::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 24 / end actions queue index 2 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 25 / end actions queue index 3 / mark / end
 
-   check 3 rules listed.
-   destroy the rule 0::
+   there are rule 0/1/2 listed::
 
-    testpmd> flow destroy 0 rule 0
+    flow list 0
 
-   verify packet 1 is distributed to different queue without "FDIR matched" printed.
-   Then check there is 2 rules listed.
-   packet 2 to queue 2 with "FDIR matched ID=0x1" printed.
-   packet 3 to queue 1 with "FDIR matched ID=0x2" printed.
-   query count::
+   send packets match rule 0, rule 1 and rule 2,
+   Verify all packets can be redirected to expected queue and mark.
+   destory the second rule::
 
-    testpmd> flow query 0 2 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 2
-     bytes: 0
+    flow destroy 0 rule 1
 
+   list the rules, verify there are only rule 0 and rule 2 listed.
+   send packet matched rule 1, verify it is received without FDIR matched ID.
+   send packets matched rule 0 and rule 2, Verify all packets be redirected and mark.
    flush rules::
 
-    testpmd> flow flush 0
+    flow flush 0
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed, and no count exist.
+   send packets match rule 0, rule 1 and rule 2, verify all packets can not mark.
 
-Test case: mark wrong parameters
-================================
+3. create 3 rules and destory the third rule::
 
-1. create filter rules::
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 24 / end actions queue index 2 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 25 / end actions queue index 3 / mark / end
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 / end actions queue index 1 / mark id 4294967296 / end
+   there are rule 0/1/2 listed::
 
-   the flow failed to be created.
+    flow list 0
 
-2. list the flow::
+   send packets match rule 0, rule 1 and rule 2,
+   Verify all packets can be redirected to expected queue and mark.
+   destory the last rule::
 
-    testpmd> flow list 0
+    flow destroy 0 rule 2
 
-   Then check there is no rule listed.
+   list the rules, verify there are only rule 0 and rule 1 listed.
+   send packet matched rule 2, verify it is received without FDIR matched ID.
+   send packets matched rule 0 and rule 1, Verify all packets be redirected and mark.
+   flush rules::
 
-Test case: pattern conflict flow
-================================
+    flow flush 0
 
-MAC_IPV4_PAY and MAC_IPV4_UDP are conflict patterns.
-so if create one, then create the other one, the second flow will be
-set to switch filer.
-IPV4_UDP packet can match MAC_IPV4_PAY rule.
-but IPV4_PAY packet cannot match MAC_IPV4_UDP rule.
+   send packets match rule 0, rule 1 and rule 2, verify all packets can not mark.
 
-1. set MAC_IPV4_PAY firstly::
+Subcase 4: max rules
+--------------------
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions queue index 1 / end
+1. create 15360 rules on port 0::
 
-   the first flow is set to fdir filter, send matched packet::
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is 192.168.0.0 / end actions queue index 1 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is 192.168.0.1 / end actions queue index 1 / mark / end
+    ......
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is 192.168.59.255 / end actions queue index 1 / mark / end
 
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/Raw('x' * 80)],iface="enp175s0f0", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
+   all the rules are created successfully.
 
-   the two type packets both to queue 1.
-   then create MAC_IPV4_UDP flow, it is set to switch filer::
+2. create one more rule::
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 2 / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is 192.168.60.0 / end actions queue index 1 / mark / end
 
-   send same packets, IPV4_PAY packet to queue 1, IPV4_UDP packet to queue 2.
+   the rule failed to create. return the error message::
 
-2. set MAC_IPV4_UDP firstly::
+    Failed to create flow
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 2 / end
+3. check the rule list, there are 15360 rules listed.
 
-   send matched packet::
+4. send matched packets for rule 0 and rule 15359::
 
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.100.20",dst="192.168.0.0")/Raw('x' * 80)],iface="enp175s0f0")
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.100.20",dst="192.168.59.255")/Raw('x' * 80)],iface="enp175s0f0")
 
-   packet to queue 2.
-   then create MAC_IPV4_PAY flow::
+   check all packets are redirected to expected queue with FDIR matched ID=0x0
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions queue index 1 / end
+5. flush all the rules, check the rule list,
+   there is no rule listed.
 
-   send same packet, packet to queue 1, because the packet match switch filter first.
+6. verify matched packets for rule 0 and rule 15359 received without FDIR matched ID.
-- 
2.7.4


             reply	other threads:[~2020-04-01  0:37 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-01  7:51 Peng Yuan [this message]
2020-04-01  5:54 ` Tu, Lijuan

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=1585727515-149718-1-git-send-email-yuan.peng@intel.com \
    --to=yuan.peng@intel.com \
    --cc=dts@dpdk.org \
    /path/to/YOUR_REPLY

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

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).