diff --git a/test_plans/cvl_advanced_rss_test_plan.rst b/test_plans/cvl_advanced_rss_test_plan.rst
index 000ac383..69730e06 100644
--- a/test_plans/cvl_advanced_rss_test_plan.rst
+++ b/test_plans/cvl_advanced_rss_test_plan.rst
@@ -1,4 +1,4 @@
-.. Copyright (c) <2019>, Intel Corporation
+.. Copyright (c) <2020>, Intel Corporation
          All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
@@ -37,13 +37,13 @@ CVL: Advanced RSS FOR CVL
 Description
 ===========
 
-Advanced RSS only support columbiaville nic with ice , throught create rule include related pattern and input-set
-to hash IP and ports domain, diversion the packets to the difference queues.
+Advanced RSS only support columbiaville nic with ice , through creating rules which include related pattern and input-set
+to hash IP and ports domain, diverting the packets to different queues.
 
 * inner header hash for tunnel packets, including comms package.
-* symmetric hash by rte_flow RSS action.
-* input set change by rte_flow RSS action.
-  
+* symmetric hash by rte_flow RSS func.
+* input set changed by rte_flow RSS types.
+
 Pattern and input set
 ---------------------
 .. table::
@@ -51,79 +51,139 @@ Pattern and input set
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
     | Default hash function: Non Symmetric_toeplitz                                                                                                |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    | Packet Type                   | Pattern                   | Input Set                                                                        |
+    | Packet Type                   | Pattern                   | All the Input Set options in combination                                         |
     +===============================+===========================+==================================================================================+
-    | IPv4/IPv6 + TCP/UDP/SCTP/ICMP | MAC_IPV4_SRC_ONLY         | [Dest MAC]，[Source IP]                                                          |
+    | IPv4/IPv6 + TCP/UDP/SCTP      | MAC_IPV4                  | eth, l2-src-only, l2-dst-only, ipv4, l3-src-only, l3-dst-only                    |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_UDP              | eth, l2-src-only, l2-dst-only, ipv4-udp, l3-src-only, l3-dst-only,               |
+    |                               |                           | l4-src-only, l4-dst-only                                                         |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_TCP              | eth, l2-src-only, l2-dst-only, ipv4-tcp, l3-src-only, l3-dst-only,               |
+    |                               |                           | l4-src-only, l4-dst-only                                                         |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_SCTP             | eth, l2-src-only, l2-dst-only, ipv4-sctp, l3-src-only, l3-dst-only,              |
+    |                               |                           | l4-src-only, l4-dst-only                                                         |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV6                  | eth, l2-src-only, l2-dst-only, ipv6, l3-src-only, l3-dst-only                    |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_UDP              | eth, l2-src-only, l2-dst-only, ipv6-udp, l3-src-only, l3-dst-only,               |
+    |                               |                           | l4-src-only, l4-dst-only                                                         |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_TCP              | eth, l2-src-only, l2-dst-only, ipv6-tcp, l3-src-only, l3-dst-only,               |
+    |                               |                           | l4-src-only, l4-dst-only                                                         |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_SCTP             | eth, l2-src-only, l2-dst-only, ipv6-sctp, l3-src-only, l3-dst-only,              |
+    |                               |                           | l4-src-only, l4-dst-only                                                         |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    | GTP-U data packet types       | MAC_IPV4_GTPU_IPV4        | gtpu, ipv4, l3-src-only, l3-dst-only                                             |
+    | IPv4/IPv6 transport           |                           |                                                                                  |
+    | IPv4/IPv6 payload             |                           |                                                                                  |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_IPV4_UDP    | gtpu, ipv4-udp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_IPV4_TCP    | gtpu, ipv4-tcp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_IPV6        | gtpu, ipv6, l3-src-only, l3-dst-only                                             |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_IPV6_UDP    | gtpu, ipv6-udp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_IPV6_TCP    | gtpu, ipv6-tcp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_IPV4        | gtpu, ipv4, l3-src-only, l3-dst-only                                             |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_IPV4_UDP    | gtpu, ipv4-udp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_DST_ONLY_FRAG    | [Dest MAC]，[Dest IP]                                                            |
+    |                               | MAC_IPV6_GTPU_IPV4_TCP    | gtpu, ipv4-tcp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_PAY              | [Dest MAC]，[Source IP], [Dest IP]                                               |
+    |                               | MAC_IPV6_GTPU_IPV6        | gtpu, ipv6, l3-src-only, l3-dst-only                                             |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_SRC_ICMP         | [Dest MAC]，[Source IP]                                                          |
+    |                               | MAC_IPV6_GTPU_IPV6_UDP    | gtpu, ipv6-udp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_DST_ICMP         | [Dest MAC]，[Source IP]                                                          |
+    |                               | MAC_IPV6_GTPU_IPV6_TCP    | gtpu, ipv6-tcp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_UDP_L3SRC_L4DST  | [Dest MAC]，[Source IP],[Dest Port]                                              |
+    |                               | MAC_IPV4_GTPU_EH_IPV4     | gtpu, ipv4, l3-src-only, l3-dst-only                                             |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_UDP              | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]    |
+    |                               | MAC_IPV4_GTPU_EH_IPV4_UDP | gtpu, ipv4-udp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_TCP_L3SRC_L4DST  | [Dest MAC]，[Source IP],[Dest Port]                                              |
+    |                               | MAC_IPV4_GTPU_EH_IPV4_TCP | gtpu, ipv4-tcp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_TCP_L3DST_L4SRC  | [Dest MAC]，[Dest IP],[Source Port]                                              |
+    |                               | MAC_IPV4_GTPU_EH_IPV6     | gtpu, ipv6, l3-src-only, l3-dst-only                                             |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_TCP              | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]    |
+    |                               | MAC_IPV4_GTPU_EH_IPV6_UDP | gtpu, ipv6-udp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_SCTP_L3SRC_L4DST | [Dest MAC]，[Source IP],[Dest Port]                                              |
+    |                               | MAC_IPV4_GTPU_EH_IPV6_TCP | gtpu, ipv6-tcp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_SCTP             | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]    |
+    |                               | MAC_IPV6_GTPU_EH_IPV4     | gtpu, ipv4, l3-src-only, l3-dst-only                                             |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_NVGRE_ICMP       | [Inner Source IP], [Inner Dest IP]                                               |
+    |                               | MAC_IPV6_GTPU_EH_IPV4_UDP | gtpu, ipv4-udp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_NVGRE_L3SRC_ICMP | [Inner MAC][Inner Source IP]                                                     |
+    |                               | MAC_IPV6_GTPU_EH_IPV4_TCP | gtpu, ipv4-tcp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_NVGRE_L3DST_ICMP | [Inner MAC][Inner Dest IP]                                                       |
+    |                               | MAC_IPV6_GTPU_EH_IPV6     | gtpu, ipv6, l3-src-only, l3-dst-only                                             |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_NVGRE_TCP        | [Inner Source IP], [Inner Dest IP],[Inner Source Port], [Inner Dest Port]        |
+    |                               | MAC_IPV6_GTPU_EH_IPV6_UDP | gtpu, ipv6-udp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_NVGRE_SCTP       | [Inner Source IP], [Inner Dest IP],[Inner Source Port], [Inner Dest Port]        |
+    |                               | MAC_IPV6_GTPU_EH_IPV6_TCP | gtpu, ipv6-tcp, l3-src-only, l3-dst-only, l4-src-only, l4-dst-only               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_VXLAN_ICMP       | [Inner Source IP], [Inner Dest IP]                                               |
+    | VLAN                          | MAC_VLAN_IPV4             | c-vlan                                                                           |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_VXLAN_L3SRC_ICMP | [Inner MAC][Inner Source IP]                                                     |
+    |                               | MAC_VLAN_IPV4_UDP_PAY     | c-vlan                                                                           |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_VXLAN_L3DST_ICMP | [Inner MAC][Inner Dest IP]                                                       |
+    |                               | MAC_VLAN_IPV4_TCP_PAY     | c-vlan                                                                           |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_VXLAN_TCP        | [Inner Source IP], [Inner Dest IP],[Inner Source Port], [Inner Dest Port]        |
+    |                               | MAC_VLAN_IPV4_SCTP_PAY    | c-vlan                                                                           |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_VXLAN_SCTP       | [Inner Source IP], [Inner Dest IP],[Inner Source Port], [Inner Dest Port]        |
+    |                               | MAC_VLAN_IPV6             | c-vlan                                                                           |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_VXLAN_UDP        | [Inner Source IP], [Inner Dest IP],[Inner Source Port], [Inner Dest Port]        |
+    |                               | MAC_VLAN_IPV6_UDP_PAY     | c-vlan                                                                           |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV6_SRC_ONLY         | [Dest MAC]，[Source IP]                                                          |
+    |                               | MAC_VLAN_IPV6_TCP_PAY     | c-vlan                                                                           |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV6_DST_ONLY_FRAG    | [Dest MAC]，[Dest IP]                                                            |
+    |                               | MAC_VLAN_IPV6_SCTP_PAY    | c-vlan                                                                           |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV6_PAY              | [Dest MAC]，[Source IP], [Dest IP],                                              |
+    | PPPOES                        | MAC_PPPOES_IPV4           | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only, ipv4                    |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV6_UDP              | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]    |
+    |                               | MAC_PPPOES_IPV4_UDP       | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only,                         |
+    |                               |                           | l4-src-only, l4-dst-only, ipv4-udp                                               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV6_TCP              | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]    |
+    |                               | MAC_PPPOES_IPV4_TCP       | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only,                         |
+    |                               |                           | l4-src-only, l4-dst-only, ipv4-tcp                                               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV6_SCTP             | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]    |
+    |                               | MAC_PPPOES_IPV4_SCTP      | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only,                         |
+    |                               |                           | l4-src-only, l4-dst-only, ipv4-sctp                                              |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_PPPOE_PPPOD      | [Dest MAC]，[Session ID],[Proto] ,[Source IP] ,[Dest IP]                         |
+    |                               | MAC_PPPOES_IPV6           | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only, ipv6                    |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_PPPOE_TCP        | [Dest MAC]，[Session ID],[Proto],[Source IP],[Dest IP],[Source Port],[Dest Port] |
+    |                               | MAC_PPPOES_IPV6_UDP       | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only,                         |
+    |                               |                           | l4-src-only, l4-dst-only, ipv6-udp                                               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_PPPOE_UDP        | [Dest MAC]，[Session ID],[Proto],[Source IP],[Dest IP],[Source Port],[Dest Port] |
+    |                               | MAC_PPPOES_IPV6_TCP       | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only,                         |
+    |                               |                           | l4-src-only, l4-dst-only, ipv6-tcp                                               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_PPPOE_TCP        | [Dest MAC]，[Session ID],[Proto],[Source IP],[Dest IP],[Source Port],[Dest Port] |
+    |                               | MAC_PPPOES_IPV6_SCTP      | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only,                         |
+    |                               |                           | l4-src-only, l4-dst-only, ipv6-udp                                               |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_PPPOE_ICMP       | [Dest MAC]，[Session ID],[Proto],[Source IP],[Dest IP]                           |
+    |                               | MAC_PPPOES                | eth, l2-src-only, l2-dst-only, pppoe                                             |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_GTP              |  [TEID]                                                                          |
+    | ESP                           | MAC_IPV4_ESP              | esp                                                                              |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_GTPU_IPV4_TCP    |  [TEID]                                                                          |
+    |                               | MAC_IPV4_UDP_ESP          | esp                                                                              |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_ESP              | esp                                                                              |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_UDP_ESP          | esp                                                                              |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    | AH                            | MAC_IPV4_AH               | ah                                                                               |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_AH               | ah                                                                               |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    | L2TP                          | MAC_IPV4_L2TP             | l2tpv3                                                                           |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_L2TP             | l2tpv3                                                                           |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    | PFCP                          | MAC_IPV4_PFCP             | pfcp                                                                             |
+    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_PFCP             | pfcp                                                                             |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
 
 .. table::
@@ -133,111 +193,98 @@ Pattern and input set
     +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
     | Packet Type                   | Pattern                   | Input Set                                                                      |
     +===============================+===========================+================================================================================+
-    |  IPV4/IPV6                    | MAC_IPV4_SRC_ONLY         | [Dest MAC]，[Source IP]                                                        |
+    | IPv4/IPv6 + TCP/UDP/SCTP      | MAC_IPV4                  | ipv4                                                                           |
     +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_DST_ONLY_FRAG    | [Dest MAC]，[Dest IP]                                                          |
+    |                               | MAC_IPV4_UDP              | ipv4-udp                                                                       |
     +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_PAY              | [Dest MAC]，[Source IP], [Dest IP]                                             |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+ 
-    |                               | MAC_IPV4_SRC_ICMP         | [Dest MAC]，[Source IP]                                                        |
+    |                               | MAC_IPV4_TCP              | ipv4-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_SCTP             | ipv4-sctp                                                                      |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6                  | ipv6                                                                           |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_UDP              | ipv6-udp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_TCP              | ipv6-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_SCTP             | ipv6-sctp                                                                      |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    | GTP-U data packet types       | MAC_IPV4_GTPU_IPV4        | ipv4                                                                           |
+    | IPv4/IPv6 transport           |                           |                                                                                |
+    | IPv4/IPv6 payload             |                           |                                                                                |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_IPV4_UDP    | ipv4-udp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_IPV4_TCP    | ipv4-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_IPV6        | ipv6                                                                           |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_IPV6_UDP    | ipv6-udp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_IPV6_TCP    | ipv6-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_IPV4        | ipv4                                                                           |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_IPV4_UDP    | ipv4-udp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_IPV4_TCP    | ipv4-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_IPV6        | ipv6                                                                           |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_IPV6_UDP    | ipv6-udp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_IPV6_TCP    | ipv6-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_EH_IPV4     | ipv4                                                                           |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_EH_IPV4_UDP | ipv4-udp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_EH_IPV4_TCP | ipv4-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_EH_IPV6     | ipv6                                                                           |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_EH_IPV6_UDP | ipv6-udp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV4_GTPU_EH_IPV6_TCP | ipv6-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_EH_IPV4     | ipv4                                                                           |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_EH_IPV4_UDP | ipv4-udp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_EH_IPV4_TCP | ipv4-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_EH_IPV6     | ipv6                                                                           |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_EH_IPV6_UDP | ipv6-udp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_IPV6_GTPU_EH_IPV6_TCP | ipv6-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    | PPPOES                        | MAC_PPPOES_IPV4           | ipv4                                                                           |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_PPPOES_IPV4_UDP       | ipv4-udp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_PPPOES_IPV4_TCP       | ipv4-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_PPPOES_IPV4_SCTP      | ipv4-sctp                                                                      |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_PPPOES_IPV6           | ipv6                                                                           |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_PPPOES_IPV6_UDP       | ipv6-udp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_PPPOES_IPV6_TCP       | ipv6-tcp                                                                       |
+    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
+    |                               | MAC_PPPOES_IPV6_SCTP      | ipv6-sctp                                                                      |
     +-------------------------------+---------------------------+--------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_DST_ICMP         | [Dest MAC]，[Source IP]                                                        |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_UDP_L3SRC_L4DST  | [Dest MAC]，[Source IP],[Dest Port]                                            |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_UDP              | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]  |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_TCP_L3SRC_L4DST  | [Dest MAC]，[Source IP],[Dest Port]                                            |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_TCP_L3DST_L4SRC  | [Dest MAC]，[Dest IP],[Source Port]                                            |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_TCP              | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]  |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_SCTP_L3SRC_L4DST | [Dest MAC]，[Source IP],[Dest Port]                                            |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_SCTP             | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]  |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_NVGRE_ICMP       | [Inner Source IP], [Inner Dest IP]                                             |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_NVGRE_L3SRC_ICMP | [Inner MAC][Inner Source IP]                                                   |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_NVGRE_L3DST_ICMP | [Inner MAC][Inner Dest IP]                                                     |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_NVGRE_TCP        | [Inner Source IP], [Inner Dest IP],[Inner Source Port], [Inner Dest Port]      |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_NVGRE_SCTP       | [Inner Source IP], [Inner Dest IP],[Inner Source Port], [Inner Dest Port]      |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_VXLAN_ICMP       | [Inner Source IP], [Inner Dest IP]                                             |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_VXLAN_L3SRC_ICMP | [Inner MAC][Inner Source IP]                                                   |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_VXLAN_L3DST_ICMP | [Inner MAC][Inner Dest IP]                                                     |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_VXLAN_TCP        | [Inner Source IP], [Inner Dest IP],[Inner Source Port], [Inner Dest Port]      |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_VXLAN_SCTP       | [Inner Source IP], [Inner Dest IP],[Inner Source Port], [Inner Dest Port]      |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_VXLAN_UDP        | [Inner Source IP], [Inner Dest IP],[Inner Source Port], [Inner Dest Port]      |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV6_SRC_ONLY         | [Dest MAC]，[Source IP]                                                        |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV6_DST_ONLY_FRAG    | [Dest MAC]，[Dest IP]                                                          |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV6_PAY              | [Dest MAC]，[Source IP], [Dest IP],                                            |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV6_UDP              | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]  |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV6_TCP              | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]  |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV6_SCTP             | [Dest MAC]，[Source IP], [Dest IP], [TTL], [DSCP], [Source Port], [Dest Port]  |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV4_SIMPLE_XOR       | [Dest MAC]，[Source IP], [Dest IP]                                             |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-    |                               | MAC_IPV6_SIMPLE_XOR       | [Dest MAC]，[Source IP], [Dest IP]                                             |
-    +-------------------------------+---------------------------+--------------------------------------------------------------------------------+	
-
-Default parameters
-------------------
-
-   MAC::
-
-    [Dest MAC]: 68:05:ca:a3:28:94
-
-   IPv4-Symmetric_toeplitz and simplexor::
-
-    [Source IP]: 192.168.0.20
-    [Dest IP]: 192.168.0.21
-    [IP protocol]: 255
-    [TTL]: 2
-    [DSCP]: 4
-
-   IPv6--Symmetric_toeplitz and simplexor::
-
-    [Source IPv6]: 2001::2
-    [Dest IPv6]: CDCD:910A:2222:5498:8475:1111:3900:2020
-    [IP protocol]: 1
-    [TTL]: 2
-    [TC]: 1
-
-   UDP/TCP/SCTP::
-
-    [Source IP]: RandIP
-    [Dest IP]: RandIP
-    [Source Port]: Randport
-    [Dest Port]: Randport
-
-   VXLAN inner only---Symmetric_toeplitz::
-
-    [Inner Source IP]: 192.168.0.20
-    [Inner Dest IP]: 192.168.0.21
-    [Inner Source Port]: 22
-    [Inner Dest Port]: 23
 
-   GTP-U data packet::
+.. note::
 
-    [TEID]: 0x12345678
+    This test plan only cover the packet type IPv4/IPv6 + TCP/UDP/SCTP,
+    including toeplitz, symmetric and simple-xor.
+    Other packet types will be coverd in other test plans.
+    Rules with src/dst mac addresses as hash input set can not be applied
+    to tunnel packets. So in the test cases with input set src/dst mac addresses,
+    matched packets do not include tunnel packets.
 
-	
 Prerequisites
 =============
 
@@ -249,7 +296,7 @@ Prerequisites
 
    - dpdk: http://dpdk.org/git/dpdk
    - scapy: http://www.secdev.org/projects/scapy/
- 
+
 .. note::
 
    This rss feature designed for CVL NIC 25G and 100g, so below the case only support CVL nic.
@@ -262,1351 +309,2060 @@ Prerequisites
 .. note::
 
    The kernel must be >= 3.6+ and VT-d must be enabled in bios.
-   
+
 4. Launch the testpmd to configuration queue of rx and tx number 64 in DUT::
 
     testpmd>./x86_64-native-linuxapp-gcc/app/testpmd  -c 0xff -n 4 -- -i --rxq=64 --txq=64 --port-topology=loop
+
+   or disable rss in command line::
+
+    testpmd>./x86_64-native-linuxapp-gcc/app/testpmd  -c 0xff -n 4 -- -i --rxq=64 --txq=64 --disable-rss --port-topology=loop
     testpmd>set fwd rxonly
     testpmd>set verbose 1
     testpmd>rx_vxlan_port add 4789 0
-   
+
 5. start scapy and configuration NVGRE and GTP profile in tester
    scapy::
 
    >>> import sys
    >>> sys.path.append('~/dts/dep')
    >>> from nvgre import NVGRE
-   >>> from scapy.contrib.gtp import * 
+   >>> from scapy.contrib.gtp import *
 
-Test case: MAC_IPV4_L3SRC
-=========================
 
-#. create rule for the rss type for l3 src only::
-
-    testpmd>flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
-    testpmd>start
-
-#. send the 100 IP pkts::
-
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP())/("X"*480)], iface="enp175s0f0", count=100)
-    testpmd> stop
-
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value,and check the pkts typ is “L2_ETHER L3_IPV4 NONFRAG”
-   
-   Verbose log parses and check point example: 
-   Once rule has created and receive related packets, 
-   Check the rss hash value and rss queue, make sure the different hash value and cause to related packets enter difference queue::
-   
-    src=00:00:00:00:00:00 - dst=68:05:CA:A3:28:94 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0x60994f6e - RSS queue=0x2e - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x2e ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
-   
-statistics log::
-
-   ------- Forward Stats for RX Port= 0/Queue= 0 -> TX Port= 0/Queue= 0 -------
-   RX-packets: 1              TX-packets: 0              TX-dropped: 0
-   
-   ------- Forward Stats for RX Port= 0/Queue= 1 -> TX Port= 0/Queue= 1 -------
-   RX-packets: 2              TX-packets: 0              TX-dropped: 0
-   ......
-   
-   ------- Forward Stats for RX Port= 0/Queue=63 -> TX Port= 0/Queue=63 -------
-   RX-packets: 4              TX-packets: 0              TX-dropped: 0
-
-   ---------------------- Forward statistics for port 0  ----------------------
-   RX-packets: 100            RX-dropped: 0             RX-total: 100
-   TX-packets: 0              TX-dropped: 0             TX-total: 0
-   ----------------------------------------------------------------------------
-   
-   +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
-   RX-packets: 100            RX-dropped: 0             RX-total: 100
-   TX-packets: 0              TX-dropped: 0             TX-total: 0
-   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 
-Test case: MAC_IPV4_L3SRC_FRAG
-==============================
-
-#. create rule for the rss type for l3 src only::
-
-    testpmd>flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
-    testpmd> start
-
-#. send the 100 IP +frag type pkts::
-
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(), frag=5)/SCTP(sport=RandShort())/("X" * 80)], iface="enp175s0f0", count=100)
-    testpmd> stop
-
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value,and check the pkts typ is L2_ETHER L3_IPV4 "FRAG"
- 
-Test case: MAC_IPV4_L3DST:   
-==========================
+Default parameters
+------------------
+
+   MAC::
 
-#. create rule for the rss type for l3 dst only::
+    [Src MAC]: 00:11:22:33:44:55
+    [Dest MAC]: 68:05:CA:BB:26:E0
 
-    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
-    testpmd> start
+   IPv4::
 
-#. send the 100 IP +frag type pkts::
+    [Dest IP]: 192.168.0.1
+    [Source IP]: 192.168.0.2
 
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(dst=RandIP())/("X"*480)], iface="enp175s0f0", count=100)
-    testpmd> stop
+   IPv6::
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with
-   differently RSS random value,and check the pkts typ is L2_ETHER L3_IPV4 "FRAG"
+    [Source IPv6]: ABAB:910B:6666:3457:8295:3333:1800:2929
+    [Dest IPv6]: CDCD:910A:2222:5498:8475:1111:3900:2020
 
-Test case: MAC_IPV4_L3DST_FRAG:
-=============================== 
-#. create rule for the rss type for l3 dst only::
+   UDP/TCP/SCTP::
 
-    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
-    testpmd> start
-   
-#. send the 100 IP frag pkts::
+    [Source Port]: 22
+    [Dest Port]: 23
 
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(dst=RandIP(), frag=5)/SCTP(sport=RandShort())/("X" * 80)], iface="enp175s0f0", count=100)
-    testpmd> stop
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value,and check the pkts typ is L2_ETHER L3_IPV4 "FRAG"
-   
-Test case: MAC_IPV4_L3SRC_FRAG_ICMP:
-==================================== 
-#. create rule for the rss type for l3 dst only::
+toeplitz Test steps
+===================
+launch testpmd with "--disable-rss"
+all the test cases run the same test steps as below:
+1. validate rule.
+2. create rule and list rule.
+3. send a basic hit pattern packet,record the hash value,
+   check the packet is distributed to queues by RSS.
+4. send hit pattern packet with changed input set in the rule.
+   check the received packet have different hash value with basic packet.
+   check the packet is distributed to queues by rss.
+5. send hit pattern packet with changed input set not in the rule.
+   check the received packet have same hash value with the basic packet.
+   check the packet is distributed to queues by rss.
+note: if there is not this type packet in the case, omit this step.
+6. send not hit pattern packets with input set in the rule.
+   check the received packets have not hash value, and distributed to queue 0.
+note: if there is not this type packet in the case, omit this step.
+7. distroy the rule and list rule.
+8. send same packet with step 3.
+   check the received packets have not hash value, and distributed to queue 0.
 
-    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
-    testpmd> start
+Test case: MAC_IPV4
+===================
+basic hit pattern packets are the same in this test case:
+ipv4-nonfrag packets::
 
-#. send the 100 IP pkts::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
 
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(), frag=5)/ICMP()/("X" * 80)], iface="enp175s0f0", count=100)
-    testpmd> stop
+ipv4-frag packets::
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-   
-Test case: MAC_IPV4_L3DST_FRAG_ICMP:
-====================================
-#. create rule for the rss type for l3 dst only::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)],iface="ens786f0")
 
-    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
-    testpmd> start
+ipv4-icmp packets::
 
-#. send the 100 IP pkts::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="ens786f0")
 
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(dst=RandIP(), frag=5)/ICMP()/("X" * 80)], iface="enp175s0f0", count=100)
-    testpmd> stop
+ipv4-tcp packets::
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-Test case: MAC_IPV4_PAY:
-========================
-#. create rule for the rss type for l3 all keywords::
+ipv4-udp-vxlan packet::
 
-    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end
-    testpmd> start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src='192.168.0.2')/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
 
-#. send the 100 IP pkts::
+not hit pattern packets are the same in this test case::
 
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(),dst=RandIP())/("X"*480)], iface="enp175s0f0", count=100)
-    testpmd>stop   
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929", dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/Raw("x"*80)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
- 
-Test case: MAC_IPV4_PAY_FRAG_ICMP:
-==================================
-#. create rule for the rss type for IPV4 l3 all (src and dst) +frag+ICMP::
+Subcase: MAC_IPV4_L2SRC
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.3", src="192.168.0.5",frag=7)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=19,dport=99)/("X"*480)],iface="ens786f0")
+
+Subcase: MAC_IPV4_L2DST
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5",frag=7)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=23,dport=25)/("X"*480)],iface="ens786f0")
+
+Subcase: MAC_IPV4_L2SRC_L2DST
+-----------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss types eth end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5",frag=7)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=23,dport=25)/("X"*480)],iface="ens786f0")
+
+Subcase: MAC_IPV4_L3SRC
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2",frag=6)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4-udp-vxlan packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src='192.168.1.2')/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2",frag=6)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
+
+ipv4-udp-vxlan packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.1.1", src='192.168.0.2')/UDP(sport=32,dport=33)/("X"*480)], iface="ens786f0")
+
+Subcase: MAC_IPV4_L3DST
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2",frag=6)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4-udp-vxlan packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.1.1", src='192.168.0.2')/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2",frag=6)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
+
+ipv4-udp-vxlan packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src='192.168.1.2')/UDP(sport=32,dport=33)/("X"*480)], iface="ens786f0")
+
+Subcase: MAC_IPV4_ALL
+---------------------
+1. create rss rule::
 
     flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end
-   
-#. send the 100 IP pkts::
-
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(),dst=RandIP())/ICMP()/("X"*480)], iface="enp175s0f0", count=100)
-    testpmd>stop
-   
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-
-Test case: MAC_IPV4_NVGRE_L3SRC:
-================================
-#. create rule for the rss type is IPV4 l3 src +NVGRE inner IPV4 +frag + ICMP::
-
-    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
-    testpmd> start
-
-#. send the 100 IP nvgre pkts::
-
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src=RandIP())/ICMP()/("X"*480)],iface="enp175s0f0",count=100)
-    testpmd> stop
-
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-  
-Test case: MAC_IPV4_NVGRE_L3DST:
-================================
-#. create rule for the rss type is IPV4 l3 dst +NVGRE inner IPV4 +frag + ICMP::
-
-    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
-    testpmd> start
-
-#. send the 100 IP nvgre pkts::
-
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(dst=RandIP())/ICMP()/("X"*480)],iface="enp175s0f0",count=100)
-    testpmd> stop
-   
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value  
-  
-Test case: MAC_IPV4_VXLAN_L3SRC:
-================================
-#. create rule for the rss type is IPV4 src VXLAN +frag +ICMP:: 
-
-    testpmd>flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
-    testpmd>start
-
-#. send the 100 VXLAN pkts::
-
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src=RandIP(), frag=5)/ICMP()/("X" * 80)], iface="enp175s0f0", count=100)
-    testpmd> stop
-
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-  
-Test case: MAC_IPV4_NVGRE_L3DST:
-================================
-#. create rule for the rss type is IPV4 dst VXLAN +frag+ICMP::
-   
-    testpmd>flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
-    testpmd>start
-
-#. send the 100 vxlan pkts::
-   
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(dst=RandIP(), frag=5)/ICMP()/("X" * 80)], iface="enp175s0f0", count=100)
-    testpmd> stop
-
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
- 
-Test case: MAC_IPV4_NVGRE:
-==========================
-#. create rule for the rss type is IPV4 all VXLAN +frag +ICMP::
-   
-    testpmd>flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end
-    testpmd>start
-   
-#. send the 100 vxlan pkts::
-
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src=RandIP(),dst=RandIP(),frag=5)/ICMP()/("X" * 80)], iface="enp175s0f0", count=100)
-    testpmd> stop
-
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value 
-  
-Test case: MAC_IPV6_L3SRC
-==========================
-#. create rule for the rss type is IPV6 L3 src::
-   
-    testpmd>flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end
-    testpmd>start
-
-#. send the 100 IPV6 pkts::
-
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src=RandIP6())/("X" * 80)], iface="enp175s0f0", count=100)
-	   
-Test case: MAC_IPV6_L3SRC_FRAG
-===============================
-#. create rule for the rss type is IPV6 L3 src +ExtHdrFragment::
-
-    testpmd>flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end
-    testpmd>start
-   
-#. send the 100 IPV6 pkts::
-
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/("X" * 80)], iface="enp175s0f0", count=100)
-    testpmd> stop
-
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-  
-Test case: MAC_IPV6_L3DST
-=========================
-#. create rule for the rss type is IPV6 L3 dst +ExtHdrFragment::
 
-    testpmd>flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end
-    testpmd>start
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2",frag=6)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2",frag=6)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4-udp-vxlan packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.1.1", src='192.168.0.2')/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src='192.168.1.2')/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)],iface="ens786f0")
 
-#. send the 100 IPV6 pkts::
+ipv4-icmp packets::
 
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(dst=RandIP6())/IPv6ExtHdrFragment()/("X" * 80)], iface="enp175s0f0", count=100)
-    testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
- 
-Test case: MAC_IPV6_PAY
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
+
+Test case: MAC_IPV4_UDP
 =======================
-#. create rule for the rss type is IPV6 L3 all +ExtHdrFragment+ICMP::
 
-    testpmd>flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end
-    testpmd>start
+basic hit pattern packets are the same in this test case.
+ipv4-udp packets::
 
-#. send the 100 IPV6 pkts::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src=RandIP6(),dst=RandIP6())/IPv6ExtHdrFragment()/ICMP()/("X" * 80)], iface="enp175s0f0", count=100)
-    testpmd> stop
-   
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_IPV4_UDP: 
-========================
-#. create rule for the rss type is ipv4 UDP +l3 src and dst::
+nvgre packet::
 
-      testpmd>flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end
-      testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
 
-#. send the 100 IP+UDP pkts::
+not hit pattern packets are the same in this test case::
 
-      sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP())/UDP(dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-      testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/Raw("x"*80)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
- 
-Test case: MAC_IPV4_UDP_FRAG:
-=============================
-#. create rule for the rss type is ipv4 +UDP +frag::
+Subcase: MAC_IPV4_UDP_L2SRC
+---------------------------
+1. create rss rule::
 
-      testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end
-      testpmd> start
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end
 
-#. send the 100 IP src IP +UDP port pkts::
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-      sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-   
-#. send the 100 IP +UDP port pkts::
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-#. send the 100 IP src and dst IP  +UDP port pkts::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/UDP(sport=25,dport=99)/("X"*480)],iface="ens786f0")
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(),dst=RandIP())/UDP()/("X"*480)], iface="enp175s0f0", count=100)
-     testpmd> stop
-   
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_NVGRE_IPV4_UDP_FRAG:
-===================================  
-#. create rule for the rss type is ipv4 + inner IP and UDP:: 
+Subcase: MAC_IPV4_UDP_L2DST
+---------------------------
+1. create rss rule::
 
-     testpmd>flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end
-     testpmd>start
-   
-#. send the 100 NVGRE IP pkts::
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-     testpmd> stop   
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_VXLAN_IPV4_UDP_FRAG:
-=================================== 
-#. create rule for the rss type is ipv4 + vxlan UDP:: 
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end
-     testpmd> start
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-#. To send VXLAN pkts with IP src and dst,UDP port::
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/UDP(sport=25,dport=99)/("X"*480)],iface="ens786f0")
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-     testpmd> stop
+Subcase: MAC_IPV4_UDP_L2SRC_L2DST
+---------------------------------
+1. create rss rule::
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_IPV6_UDP:
-========================
-#. create rule for the rss type is IPV6 + UDP src and dst type hash::
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end
 
-     testpmd> flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end
-     testpmd> start
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src=RandIP6())/UDP(sport=RandShort(),dport=RandShort())/("X" * 80)], iface="enp175s0f0", count=100)
-     testpmd> stop
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-Test case: MAC_IPV6_UDP_FRAG:   
-=============================
-#. To send IPV6 pkts with IPV6 src +frag +UDP port::
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/UDP(sport=RandShort(),dport=RandShort())/("X" * 80)], iface="enp175s0f0", count=100)
-     testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/UDP(sport=25,dport=99)/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_IPV4_TCP_FRAG:   
-============================= 
-#. create rule for the rss type is IPV4 + TCP L3 src and  L4 dst type hash::
+Subcase: MAC_IPV4_UDP_L3SRC
+---------------------------
+1. create rss rule::
 
-     testpmd>flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end
 
-#. To send IPV4 pkts with scr IP and TCP dst port::
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP())/TCP(dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-     testpmd>flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-#. To send IPV4 pkts with scr IP and TCP src port::
+nvgre packet::
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IP(dst=RandIP())/TCP(sport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-     testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-  
-Test case: MAC_IPV4_TCP_PAY
-===========================
-#. Create rule for the rss type is IPV4 +tcp and hash tcp src and dst ports::
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-     testpmd>flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end
-     testpmd>start
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
 
-#. To send IPV4 pkts with IP src and dst ip and TCP ports::
+nvgre packet::
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(),dst=RandIP())/TCP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=32,dport=33)/("X"*480)], iface="ens786f0")
 
-#. To send IPV4 pkts without IP src and dst ip and includ TCP ports::
+Subcase: MAC_IPV4_UDP_L3DST
+---------------------------
+1. create rss rule::
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/TCP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end
 
-#. To send IPV4 pkts with IP src and dst ip and without TCP port::
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(),dst=RandIP())/TCP()/("X"*480)], iface="enp175s0f0", count=100)
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-#. To send IPV4 pkts with IP src and dst +frag and without TCP port::
+nvgre packet::
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(),dst=RandIP(),frag=4)/TCP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-     testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
- 
-Test case: MAC_IPV6_UDP_FRAG:   
-=============================
-#. Create rule for the RSS type nvgre IP src dst ip and TCP::
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-     testpmd>flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end
-     testpmd>start
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
 
-#. To send NVGRE ip pkts::
+nvgre packet::
 
-     sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src=RandIP(),dst=RandIP())/TCP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-     testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=32,dport=33)/("X"*480)], iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_VXLAN_IPV4_TCP
-=============================  
-#. Create rule for the rss type is IPV4 +tcp and hash tcp src and dst ports::
+Subcase: MAC_IPV4_UDP_L3SRC_L4SRC
+---------------------------------
+1. create rss rule::
 
-      testpmd>flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end
-      testpmd>start
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end
 
-#. To send VXLAN pkts includ src and dst ip and TCP ports::
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-      sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/TCP()/VXLAN()/Ether()/IP(src=RandIP(),dst=RandIP())/TCP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-      testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_IPV6_TCP
-======================= 
-#. Create rule for the rss IPV6 tcp:: 
+nvgre packet::
 
-       testpmd>flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end
-       testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)], iface="ens786f0")
 
-#. To send IPV6 pkts include TCP ports::
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-       sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src=RandIP6())/TCP(sport=RandShort(),dport=RandShort())/("X" * 80)], iface="enp175s0f0", count=100)
-       testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_IPV6_TCP_FRAG:
-=============================
-#. Create rule for the rss IPV6 tcp:: 
+nvgre packet::
 
-       testpmd>flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end
-       testpmd>start
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)], iface="ens786f0")
 
-#. To send ipv6 pkts and IPV6 frag::
+Subcase: MAC_IPV4_UDP_L3SRC_L4DST
+---------------------------------
+1. create rss rule::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/TCP(sport=RandShort(),dport=RandShort())/("X" * 80)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
- 
-Test case: MAC_IPV4_SCTP:
-=========================
-#. Create rule for the rss type IPV4 and SCTP, hash keywords with ipv4 sctp and l3 src port l4 dst port::
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp l3-src-only l4-dst-only end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
 
-#. To send IP pkts includ SCTP dport::
+nvgre packet::
 
-         sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP())/SCTP(dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)], iface="ens786f0")
 
-#. To send IP pkts includ SCTP sport::
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(dst=RandIP())/SCTP(sport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_IPV4_SCTP_FRAG:
-==============================
-#. Create rule for the rss type IPV4 and SCTP, hash keywords with ipv4 sctp::
+nvgre packet::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)], iface="ens786f0")
 
-#. To send IPV4 pkt include SCTP ports::
+Subcase: MAC_IPV4_UDP_L3DST_L4SRC
+---------------------------------
+1. create rss rule::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(),dst=RandIP())/SCTP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/SCTP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(),dst=RandIP())/SCTP()/("X"*480)], iface="enp175s0f0", count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src=RandIP(),dst=RandIP(),frag=4)/SCTP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
- 
-Test case: MAC_NVGRE_IPV4_SCTP:
-===============================
-#. Create rule for the rss type IPV4 and hash keywords ipv4 sctp src and dst type::   
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
 
-#. To send NVGRE ip pkts and sctp ports::
+nvgre packet::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src=RandIP(),dst=RandIP())/SCTP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)], iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_VXLAN_IPV4_SCTP:
-===============================
-#. create rule for the rss type IPV4 and hash keywords ipv4 sctp src and dst type::
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
 
-#. To send VXLAN ip pkts and sctp ports::
+nvgre packet::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/SCTP()/VXLAN()/Ether()/IP(src=RandIP(),dst=RandIP())/SCTP(sport=RandShort(),dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=33)/("X"*480)], iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
+Subcase: MAC_IPV4_UDP_L3DST_L4DST
+---------------------------------
+1. create rss rule::
 
-Test case: MAC_IPV6_SCTP_PAY:
-=============================
-#. Create rule for the rss type IPV6 and hash keywords ipv4 sctp src and dst type::
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp end key_len 0 queues end / end
-        testpmd>start
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-#. To send IPV6 pkts and sctp ports::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src=RandIP6())/SCTP(sport=RandShort(),dport=RandShort())/("X" * 80)], iface="enp175s0f0", count=100)
-        MAC IPV6 SCTP all+frag:
+nvgre packet::
 
-#. to send IPV6 pkts includ frag::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)], iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/SCTP(sport=RandShort(),dport=RandShort())/("X" * 80)], iface="enp175s0f0", count=100)
-        testpmd> stop
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_IPV4_PPPOD_PPPOE:
-================================
-#. Create rule for the rss type pppoes type::
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
 
-        testpmd>flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end
-        testpmd>start
+nvgre packet::
 
-#. To send pppoe 100pkts::
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=32,dport=23)/("X"*480)], iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/PPPoE(sessionid=RandShort())/PPP(proto=0x21)/IP(src=RandIP())/UDP(sport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+Subcase: MAC_IPV4_UDP_L4SRC
+---------------------------
+1. create rss rule::
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_IPV4_PPPOD_PPPOE:
-================================
-#. Create rule for the rss type pppoes::
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end
 
-        testpmd>flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end
-        testpmd>start
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-#. To send pppoe pkts::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/PPPoE(sessionid=RandShort())/PPP(proto=0x21)/IP(src=RandIP())/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+nvgre packet::
 
-#. Verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-Test case: MAC_IPV4_PPPOD_PPPOE_UDP:
-====================================
-#. Create rule for the rss type pppoes and hash l3 src , l4 dst port::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)], iface="ens786f0")
 
-        testpmd>flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end
-        testpmd>start
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-#. To send pppoe pkt and include the UPD ports::
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.1.2")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/PPPoE(sessionid=RandShort())/PPP(proto=0x21)/IP(src=RandIP())/UDP(dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+nvgre packet::
 
-#. Verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.1.2")/UDP(sport=22,dport=33)/("X"*480)], iface="ens786f0")
 
-Test case: MAC_IPV4_PPPOD_PPPOE_SCTP:
-=====================================
-#. Create rule for the rss type pppoe and hash sctp keywords::
+Subcase: MAC_IPV4_UDP_L4DST
+---------------------------
+1. create rss rule::
 
-        testpmd>flow create 0 ingress pattern eth / pppoes / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end
-        testpmd>start
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end
 
-#. To send pppoe pkt and include the SCTP ports::
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/PPPoE(sessionid=RandShort())/PPP(proto=0x21)/IP(src=RandIP())/SCTP(dport=RandShort())/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
 
-#. Verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-   
-Test case: MAC_IPV4_PPPOD_PPPOE_ICMP:
-=====================================
-#. Create rule for the rss type pppoe and hash icmp keywords::
+nvgre packet::
 
-        testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)], iface="ens786f0")
 
-#. To send pppoe pkt and include the ICMP ports::
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/PPPoE(sessionid=RandShort())/PPP(proto=0x21)/IP(src=RandIP())/ICMP()/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.1.2")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
 
-#. Verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
- 
-Test case: MAC_IPV4_GTPU_FRAG:
-==============================
-#. Create rule for the rss type GTPU and hash l3 src keywords::
+nvgre packet::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.1.2")/UDP(sport=32,dport=23)/("X"*480)], iface="ens786f0")
 
-#. To send GTPU pkts::
+Subcase: MAC_IPV4_UDP_ALL
+-------------------------
+1. create rss rule::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x123456)/IP(src=RandIP())/ICMP()/("X"*480)],iface="enp175s0f0",count=100) 
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end
 
-#. To send GTPU PKTS and IPV4 frag::
+2. hit pattern/defined input set:
+ipv4-udp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x123456)/IP(src=RandIP(),frag=6)/("X"*480)],iface="enp175s0f0",count=100) 
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-#. Verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-  
-Test case: MAC_IPV4_GTPU_FRAG_UDP:
-==================================
-#. create rule for the rss type GTPU and hash l3 src and dst keywords::
+nvgre packet::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
 
-#. to send GTP pkts and include IP pkts and UDP::
+3. hit pattern/not defined input set:
+ipv4-udp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x123456)/IP(src=RandIP(),frag=6)/UDP(dport=RandShort())/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
-   
-  
-Test case: MAC_IPV4_GTPU_FRAG_TCP:
-==================================
-#. create rule for the rss type GTPU and hash l3 src and dst keywords::
+Test case: MAC_IPV4_TCP
+=======================
+the rules and packets in this test case is similar to "Test case: MAC_IPV4_UDP"
+just change some parts of rules and packets:
+
+    rule:
+        change udp to tcp, change ipv4-udp to ipv4-tcp
+    packets:
+        if the packet's L4 layer is UDP, change it to TCP;
+        if the packet's L4 layer is TCP, change it to UDP;
+        if tunnel packet, change inner L4 layer from UDP to TCP;
+        if tunnel packet, change inner L4 layer from TCP to UDP;
+
+Subcase: MAC_IPV4_TCP_L2SRC
+---------------------------
+
+Subcase: MAC_IPV4_TCP_L2DST
+---------------------------
+
+Subcase: MAC_IPV4_TCP_L2SRC_L2DST
+---------------------------------
+
+Subcase: MAC_IPV4_TCP_L3SRC
+---------------------------
+
+Subcase: MAC_IPV4_TCP_L3DST
+---------------------------
+
+Subcase: MAC_IPV4_TCP_L3SRC_L4SRC
+---------------------------------
+
+Subcase: MAC_IPV4_TCP_L3SRC_L4DST
+---------------------------------
+
+Subcase: MAC_IPV4_TCP_L3DST_L4SRC
+---------------------------------
+
+Subcase: MAC_IPV4_TCP_L3DST_L4DST
+---------------------------------
+
+Subcase: MAC_IPV4_TCP_L4SRC
+---------------------------
+
+Subcase: MAC_IPV4_TCP_L4DST
+---------------------------
+
+Subcase: MAC_IPV4_TCP_ALL
+-------------------------
+
+
+Test case: MAC_IPV4_SCTP
+========================
+the rules and packets in this test case is similar to "Test case: MAC_IPV4_UDP"
+just change some parts of rules and packets:
+
+    rule:
+        change udp to sctp, change ipv4-udp to ipv4-sctp
+    packets:
+        if the packet's L4 layer is UDP, change it to SCTP;
+        if tunnel packet, change inner L4 layer from UDP to SCTP;
+        others can be not changed.
+
+Subcase: MAC_IPV4_SCTP_L2SRC
+----------------------------
+
+Subcase: MAC_IPV4_SCTP_L2DST
+----------------------------
+
+Subcase: MAC_IPV4_SCTP_L2SRC_L2DST
+----------------------------------
+
+Subcase: MAC_IPV4_SCTP_L3SRC
+----------------------------
+
+Subcase: MAC_IPV4_SCTP_L3DST
+----------------------------
+
+Subcase: MAC_IPV4_SCTP_L3SRC_L4SRC
+----------------------------------
+
+Subcase: MAC_IPV4_SCTP_L3SRC_L4DST
+----------------------------------
+
+Subcase: MAC_IPV4_SCTP_L3DST_L4SRC
+----------------------------------
+
+Subcase: MAC_IPV4_SCTP_L3DST_L4DST
+----------------------------------
+
+Subcase: MAC_IPV4_SCTP_L4SRC
+----------------------------
+
+Subcase: MAC_IPV4_SCTP_L4DST
+----------------------------
+
+Subcase: MAC_IPV4_SCTP_ALL
+--------------------------
+
+
+
+Test case: MAC_IPV6
+===================
+basic hit pattern packets are the same in this test case:
+ipv6-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+
+ipv6-frag packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / tcp / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
 
-#. to send GTP pkts and include IP pkts and tcp::
+ipv6-icmp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x123456)/IP(src=RandIP(),frag=6)/TCP(dport=RandShort())/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with 
-   differently RSS random value
- 
-   
-Test case: MAC_IPV4_GTPU_FRAG_ICMP:
-===================================
-#. create rule for the rss type GTPU and hash l3 src and dst keywords::
+ipv6-udp packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-#. to send GTP pkts and include IP pkts and ICMP::
+nvgre packet::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x123456)/IP(src=RandIP(),frag=6)/ICMP()/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
-        verify 100 pkts has sent, and to check the 100 pkts has send to differently totaly 64 queues evenly with
-        differently RSS random value
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
 
-Test case: SYMMETRIC_TOEPLITZ_IPV4_PAY: 
-=======================================
-#. create rule for the rss type symmetric_toeplitz and hash ipv4 src and dst keywords::
+not hit pattern packets are the same in this test case::
 
-    testpmd>flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end
-    testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IP::
+Subcase: MAC_IPV6_L2SRC
+-----------------------
+1. create rss rule::
 
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2")/("X"*480)], iface="enp175s0f0", count=100)
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end
 
-#. to send ip pkts with fix IP and switch src and dst ip address::
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
 
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1")/("X"*480)], iface="enp175s0f0", count=100)
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
 
-Verbos log:: 
+ipv6-frag packets::
 
-    src=A4:BF:01:68:D2:03 - dst=68:05:CA:A3:28:94 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0xf84ccd9b - RSS queue=0x1b - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x1b ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
 
-    src=A4:BF:01:68:D2:03 - dst=68:05:CA:A3:28:94 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0xf84ccd9b - RSS queue=0x1b - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x1b ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+ipv6-icmp packets::
 
-#. To verify the hash value keep with a same value when the IP has exchanged::
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
 
-    hash=0xf84ccd9b - RSS queue=0
-    hash=0xf84ccd9b - RSS queue=0
-   
-#. to send ip pkts with fix IP::
+ipv6-udp packets::
 
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="8.8.8.2",dst="5.6.7.8")/("X"*480)], iface="enp175s0f0", count=100)
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IP and switch src and dst ip address::
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
 
-    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="5.6.7.8",dst="8.8.8.2")/("X"*480)], iface="enp175s0f0", count=100)
-    testpmd> stop
-   
-verify 100 pkts has sent, and check the has value has fixed, verify the has value keep with a same value, when the IP has exchanged
-Verbose log::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/("X"*480)],iface="ens786f0")
 
-    src=A4:BF:01:68:D2:03 - dst=68:05:CA:A3:28:94 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0x772baed3 - RSS queue=0x13 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x13 ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
-    src=A4:BF:01:68:D2:03 - dst=68:05:CA:A3:28:94 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0x772baed3 - RSS queue=0x13 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x13 ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
-   
-#. To verify the hash value keep with a same value when the IP has exchanged::
+ipv6-frag packets::
 
-    0x772baed3 - RSS queue=0x19
-    0x772baed3 - RSS queue=0x19
-   
-statistics log::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
 
-    ------- Forward Stats for RX Port= 0/Queue=19 -> TX Port= 0/Queue=19 -------
-    RX-packets: 200            TX-packets: 0              TX-dropped: 0
-    
-    ---------------------- Forward statistics for port 0  ----------------------
-    RX-packets: 200            RX-dropped: 0             RX-total: 200
-    TX-packets: 0              TX-dropped: 0             TX-total: 0
-    ----------------------------------------------------------------------------
-    
-    +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
-    RX-packets: 200            RX-dropped: 0             RX-total: 200
-    TX-packets: 0              TX-dropped: 0             TX-total: 0
-    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ipv6-icmp packets::
 
-Test case: SYMMETRIC_TOEPLITZ_IPV4_PAY_FRAG:
-============================================
-#. create rule for the rss type symmetric_toeplitz and hash ipv4 src and dst keywords::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/ICMP()/("X"*480)],iface="ens786f0")
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end
-        testpmd>start
+ipv6-udp packets::
 
-#. to send ip pkts with fix IP includ frag::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=99)/("X"*480)],iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/("X"*480)], iface="enp175s0f0", count=100)
+Subcase: MAC_IPV6_L2DST
+-----------------------
+1. create rss rule::
 
-#. to send ip pkts with fix IP includ frag and switch src and dst ip address::
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
 
-#. verify 100 pkts has sent, and check the rss has has fixed with a same value.
-   
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
 
-Test case: SYMMETRIC_TOEPLITZ_IPV4_UDP:
-=======================================
-#. create rule for the rss type symmetric_toeplitz and hash UDP src and dst keywords::
+ipv6-frag packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IP includ frag and UDP::
+ipv6-icmp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/UDP(sport=20,dport=22)/("X"*480)], iface="enp175s0f0", count=100)
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IP includ frag and switch src and dst ip address and UDP ports::
+ipv6-udp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/UDP(sport=22,dport=20)/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-Test case: SYMMETRIC_TOEPLITZ_IPV4_UDP_L3SRC_L3DST_L4SRC_L4DST:
-===============================================================
-#. create rule for the rss type symmetric_toeplitz and hash l3 l4 keywords::
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp l3-src-only l3-dst-only l4-src-only l4-dst-only end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IP includ frag and UDP::
+ipv6-frag packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="1.1.4.1",dst="2.2.2.3")/UDP(sport=20,dport=22)/("X"*480)], iface="enp175s0f0", count=100)
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IP includ frag and switch src and dst ip address and UDP ports::
+ipv6-icmp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="2.2.2.3",dst="1.1.4.1")/UDP(sport=22,dport=20)/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/ICMP()/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-Test case: SYMMETRIC_TOEPLITZ_IPV4_TCP:
-=======================================
-#. create rule for the rss type symmetric_toeplitz and hash TCP keywords::
+ipv6-udp packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(sport=25,dport=99)/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IP includ frag and TCP::
+Subcase: MAC_IPV6_L2SRC_L2DST
+-----------------------------
+1. create rss rule::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/TCP(sport=20,dport=22)/("X"*480)], iface="enp175s0f0", count=100)
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types eth end key_len 0 queues end / end
 
-#. to send ip pkts with fix IP includ frag and switch src and dst ip address and tcp ports::
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/TCP(sport=22,dport=20)/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
- 
-Test case: SYMMETRIC_TOEPLITZ_IPV4_SCTP:
-========================================
-#. create rule for the rss type symmetric_toeplitz and hash SCTP keywords::
+ipv6-frag packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss func symmetric_toeplitz types ipv4-sctp end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IP includ frag and SCTP::
+ipv6-icmp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/SCTP(sport=20,dport=22)/("X"*480)], iface="enp175s0f0", count=100)
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IP includ frag and switch src and dst ip address and sctp ports::
+ipv6-udp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/SCTP(sport=22,dport=20)/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and check the has rssh hash keep a fixed value.
-   
-Test case: SYMMETRIC_TOEPLITZ_IPV4_ICMP:
-========================================
-#. create rule for the rss type symmetric_toeplitz and hash ICMP keywords::
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IP includ frag and ICMP::
+ipv6-frag packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/ICMP()/("X"*480)], iface="enp175s0f0", count=100)
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IP includ frag and switch src and dst ip address and ICMP ports::
+ipv6-icmp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/ICMP()/("X"*480)], iface="enp175s0f0", count=100) 
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/ICMP()/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and check the rss hash value with a fixed value .
-   
+ipv6-udp packets::
 
-Test case: SYMMETRIC_TOEPLITZ_IPV6:
-===================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=99)/("X"*480)],iface="ens786f0")
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end
-        testpmd>start
+Subcase: MAC_IPV6_L3SRC
+-----------------------
+1. create rss rule::
 
-#. to send ip pkts with fix IPV6  pkts with fixed address::
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X" * 80)], iface="enp175s0f0", count=100)
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
 
-#. to send ip pkts with fix IPv6 includ frag and switch src and dst ip address::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X" * 80)], iface="enp175s0f0", count=100)
+ipv6-frag packets::
 
-#. to send ip pkts with fix IPV6  pkts with fixed address without MAC address::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X" * 80)], iface="enp175s0f0", count=100)
+ipv6-icmp packets::
 
-#. to send ip pkts with fix IPv6 includ frag and switch src and dst ip address without mac address::
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X" * 80)], iface="enp175s0f0", count=100)
-        testpmd> stop
+ipv6-udp packets::
 
-#. verify 100 pkts has sent, and check the rssh hash with a fixed value .
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
 
-Test case: SYMMETRIC_TOEPLITZ_IPV6_PAY:
-==========================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+nvgre packet::
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IPV6  pkts with fixed address and includ IPV6 frag::
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/IPv6ExtHdrFragment()/("X" * 80)], iface="enp175s0f0", count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X" * 80)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-   
-Test case: SYMMETRIC_TOEPLITZ_IPV6_UDP:
-=======================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+ipv6-frag packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IPV6  pkts with fixed address and includ IPV6 frag and UDP port::
+ipv6-icmp packets::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=30,dport=32)/("X" * 80)], iface="enp175s0f0", count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=30)/("X" * 80)], iface="enp175s0f0", count=100)
-        testpmd> stop
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/ICMP()/("X"*480)],iface="ens786f0")
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
- 
-Test case: SYMMETRIC_TOEPLITZ_IPV6_TCP:
-=======================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+ipv6-udp packets::
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end
-        testpmd>start
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
 
-#. to send ip pkts with fix IPV6  pkts with fixed address and includ IPV6 frag and tcp port::
+nvgre packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)],iface="ens786f0")
+
+Subcase: MAC_IPV6_L3DST
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)],iface="ens786f0")
+
+ipv6-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+nvgre packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+
+ipv6-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
+
+nvgre packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+
+Subcase: MAC_IPV6_ALL
+---------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+
+ipv6-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/ICMP()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+nvgre packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+
+ipv6-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
+
+nvgre packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+
+Test case: MAC_IPV6_UDP
+=======================
+basic hit pattern packets are the same in this test case:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+not hit pattern packets are the same in this test case::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(src="192.168.0.1",dst="192.168.0.2")/UDP(sport=22,dport=23)/Raw("x"*80)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+Subcase: MAC_IPV6_UDP_L2SRC
+---------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=99)/("X"*480)],iface="ens786f0")
+
+Subcase: MAC_IPV6_UDP_L2DST
+---------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=99)/("X"*480)],iface="ens786f0")
+
+Subcase: MAC_IPV6_UDP_L2SRC_L2DST
+---------------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=99)/("X"*480)],iface="ens786f0")
+
+Subcase: MAC_IPV6_UDP_L3SRC
+---------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
+
+
+Subcase: MAC_IPV6_UDP_L3DST
+---------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=33)/("X"*480)],iface="ens786f0")
+
+
+Subcase: MAC_IPV6_UDP_L3SRC_L4SRC
+---------------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+
+Subcase: MAC_IPV6_UDP_L3SRC_L4DST
+---------------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+
+Subcase: MAC_IPV6_UDP_L3DST_L4SRC
+---------------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+
+Subcase: MAC_IPV6_UDP_L3DST_L4DST
+---------------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+
+Subcase: MAC_IPV6_UDP_L4SRC
+---------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+
+Subcase: MAC_IPV6_UDP_L4DST
+---------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+
+
+Subcase: MAC_IPV6_UDP_ALL
+-------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+ipv4_udp_vxlan_ipv6_udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)],iface="ens786f0")
+
+3. hit pattern/not defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+Test case: MAC_IPV6_TCP
+=======================
+the rules and packets in this test case is similar to "Test case: MAC_IPV6_UDP"
+just change some parts of rules and packets:
+
+    rule:
+        change udp to tcp, change ipv6-udp to ipv6-tcp
+    packets:
+        if the packet's L4 layer is UDP, change it to TCP;
+        if the packet's L4 layer is TCP, change it to UDP;
+        if tunnel packet, change inner L4 layer from UDP to TCP;
+        if tunnel packet, change inner L4 layer from TCP to UDP;
+
+Subcase: MAC_IPV6_TCP_L2SRC
+---------------------------
+
+Subcase: MAC_IPV6_TCP_L2DST
+---------------------------
+
+Subcase: MAC_IPV6_TCP_L2SRC_L2DST
+---------------------------------
+
+Subcase: MAC_IPV6_TCP_L3SRC
+---------------------------
+
+Subcase: MAC_IPV6_TCP_L3DST
+---------------------------
+
+Subcase: MAC_IPV6_TCP_L3SRC_L4SRC
+---------------------------------
+
+Subcase: MAC_IPV6_TCP_L3SRC_L4DST
+---------------------------------
+
+Subcase: MAC_IPV6_TCP_L3DST_L4SRC
+---------------------------------
+
+Subcase: MAC_IPV6_TCP_L3DST_L4DST
+---------------------------------
+
+Subcase: MAC_IPV6_TCP_L4SRC
+---------------------------
+
+Subcase: MAC_IPV6_TCP_L4DST
+---------------------------
+
+Subcase: MAC_IPV6_TCP_ALL
+-------------------------
+
+
+Test case: MAC_IPV6_SCTP
+========================
+the rules and packets in this test case is similar to "Test case: MAC_IPV6_UDP"
+just change some parts of rules and packets:
+
+    rule:
+        change udp to sctp, change ipv6-udp to ipv6-sctp
+    packets:
+        if the packet's L4 layer is UDP, change it to SCTP;
+        if tunnel packet, change inner L4 layer from UDP to SCTP;
+        others can be not changed.
+
+Subcase: MAC_IPV6_SCTP_L2SRC
+----------------------------
+
+Subcase: MAC_IPV6_SCTP_L2DST
+----------------------------
+
+Subcase: MAC_IPV6_SCTP_L2SRC_L2DST
+----------------------------------
+
+Subcase: MAC_IPV6_SCTP_L3SRC
+----------------------------
+
+Subcase: MAC_IPV6_SCTP_L3DST
+----------------------------
+
+Subcase: MAC_IPV6_SCTP_L3SRC_L4SRC
+----------------------------------
+
+Subcase: MAC_IPV6_SCTP_L3SRC_L4DST
+----------------------------------
+
+Subcase: MAC_IPV6_SCTP_L3DST_L4SRC
+----------------------------------
+
+Subcase: MAC_IPV6_SCTP_L3DST_L4DST
+----------------------------------
+
+Subcase: MAC_IPV6_SCTP_L4SRC
+----------------------------
+
+Subcase: MAC_IPV6_SCTP_L4DST
+----------------------------
+
+Subcase: MAC_IPV6_SCTP_ALL
+--------------------------
+
+
+symmetric-toeplitz Test steps
+=============================
+Launch testpmd without "--disable-rss"
+all the test cases run the same test steps as below:
+1. validate rule.
+2. send hit pattern packets with switched value of input set in the rule.
+   check the received packets have different hash value.
+   check all the packets are distributed to queues by rss.
+3. create rule and list rule.
+4. send same packets with step 2.
+   check the received packets have the same hash value.
+   check all the packets are distributed to queues by rss.
+5. send not hit pattern packets with switched value of input set in the rule.
+   check the received packets have different hash value.
+   check all the packets are distributed to queues by rss.
+note: if there is not this type packet in the case, omit this step.
+6. distroy the rule and list rule.
+7. send same packets with step 2.
+   check the received packets have different hash value, or have not hash value.
+
+Test case: symmetric MAC_IPV4
+=============================
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/("X"*480)],iface="ens786f0")
+
+ipv4-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1",frag=6)/("X"*480)],iface="ens786f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4-udp-vxlan packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src='192.168.0.2')/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.2", src='192.168.0.1')/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+
+3. not hit pattern with switched value of input set in the rule:
+ipv6-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2928",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+
+Test case: symmetric MAC_IPV4_UDP
+=================================
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=23,dport=22)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=23,dport=22)/("X"*480)],iface="ens786f0")
+
+nvgre packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=23,dport=22)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=23,dport=22)/("X"*480)], iface="ens786f0")
+
+3. not hit pattern/not defined input set packets::
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+nvgre packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+
+Test case: symmetric MAC_IPV4_TCP
+=================================
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=23,dport=22)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=23,dport=22)/("X"*480)],iface="ens786f0")
+
+ipv4-udp-vxlan-eth-ipv4-tcp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src='192.168.0.2')/TCP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.2", src='192.168.0.1')/TCP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src='192.168.0.2')/TCP(sport=23,dport=22)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.2", src='192.168.0.1')/TCP(sport=23,dport=22)/("X"*480)], iface="ens786f0")
+
+3. not hit pattern/not defined input set packets::
+ipv4-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4-udp-vxlan-eth-ipv4-udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src='192.168.0.2')/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.2", src='192.168.0.1')/UDP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+
+Test case: symmetric MAC_IPV4_SCTP
+==================================
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss func symmetric_toeplitz types ipv4-sctp end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-sctp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=23,dport=22)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=23,dport=22)/("X"*480)],iface="ens786f0")
+
+ipv4-udp-vxlan-eth-ipv4-sctp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src='192.168.0.2')/SCTP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.2", src='192.168.0.1')/SCTP(sport=22,dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src='192.168.0.2')/SCTP(sport=23,dport=22)/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.2", src='192.168.0.1')/SCTP(sport=23,dport=22)/("X"*480)], iface="ens786f0")
+
+3. not hit pattern/not defined input set packets::
+ipv4-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+Test case: symmetric MAC_IPV6
+=============================
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="ens786f0")
+
+ipv6-frag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)],iface="ens786f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="ens786f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+ipv4-udp-vxlan-eth-ipv6 packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)], iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)], iface="ens786f0")
+
+3. not hit pattern with switched value of input set in the rule:
+ipv4-nonfrag packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/("X"*480)],iface="ens786f0")
+
+Test case: symmetric MAC_IPV6_UDP
+=================================
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+nvgre-eth-ipv6-udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+3. not hit pattern/not defined input set packets::
+ipv6-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+nvgre-eth-ipv6-tcp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+Test case: symmetric MAC_IPV6_TCP
+=================================
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-tcp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+nvgre-eth-ipv6-tcp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+3. not hit pattern/not defined input set packets::
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+nvgre-eth-ipv6-udp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+Test case: symmetric MAC_IPV6_SCTP
+==================================
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss func symmetric_toeplitz types ipv6-sctp end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-sctp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+nvgre-eth-ipv6-sctp packet::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+3. not hit pattern/not defined input set packets::
+ipv6-udp packets::
+
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+    sendp([Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)],iface="ens786f0")
+
+Test case: global simple-xor
+============================
+1. Launch testpmd without "--disable-rss"
+
+2. send packets with switched l3 address::
+
+    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)], iface="ens786f0")
+    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.2", src="192.168.0.1")/("X"*480)], iface="ens786f0")
+    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22, dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22, dport=23)/("X"*480)], iface="ens786f0")
+    sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X" * 80)], iface="ens786f0")
+    sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X" * 80)], iface="ens786f0")
+    sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=22, dport=23)/("X" * 80)], iface="ens786f0")
+    sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22, dport=23)/("X" * 80)], iface="ens786f0")
+
+3. check the pair of packets with switched l3 address have different hash value, and distributed by rss.
+
+4. create a simple-xor rule::
+
+    flow create 0 ingress pattern end actions rss func simple_xor key_len 0 queues end / end
+
+5. send the packet in step 2 again.
+
+6. check the pair of packets with switched l3 address have same hash value, and distributed to same queue.
+
+7. delete the rule::
+
+    flow destroy 0 rule 0
+
+8. send the packet in step 2 again.
+
+9. check the pair of packets with switched l3 address have different hash value, and distributed by rss.
+
+Test Case: negative case
+========================
+1. create rules with invalid input set::
+
+    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l3-src-only end key_len 0 queues end / end
+    ice_flow_create(): Failed to create flow
+    port_flow_complain(): Caught PMD error type 10 (item specification): cause: 0x7fff3b61eb08, Invalid input set: Invalid argument
+    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4-udp end key_len 0 queues end / end
+    ice_flow_create(): Failed to create flow
+    port_flow_complain(): Caught PMD error type 10 (item specification): cause: 0x7fff3b61eb08, Invalid input set: Invalid argument
+    testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end
+    ice_flow_create(): Failed to create flow
+    port_flow_complain(): Caught PMD error type 10 (item specification): cause: 0x7fff3b61eb08, Invalid input set: Invalid argument
+    testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end
+    ice_flow_create(): Failed to create flow
+    port_flow_complain(): Caught PMD error type 10 (item specification): cause: 0x7fff3b61eb08, Invalid input set: Invalid argument
+    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv6 end key_len 0 queues end / end
+    ice_flow_create(): Failed to create flow
+    port_flow_complain(): Caught PMD error type 10 (item specification): cause: 0x7fff3b61eb08, Invalid input set: Invalid argument
+    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 l3-src-only end key_len 0 queues end / end
+    ice_flow_create(): Failed to create flow
+    port_flow_complain(): Caught PMD error type 10 (item specification): cause: 0x7fff3b61eb08, Invalid input set: Invalid argument
+    testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types eth end key_len 0 queues end / end
+    ice_flow_create(): Failed to create flow
+    port_flow_complain(): Caught PMD error type 10 (item specification): cause: 0x7fff3b61eb08, Invalid input set: Invalid argument
+
+   check all the rule failed to be created.
+
+2. validate all the rules in step 1::
+
+    flow validate 0 ingress pattern eth / ipv4 / end actions rss types eth l3-src-only end key_len 0 queues end / end
+    flow validate 0 ingress pattern eth / ipv4 / end actions rss types ipv4-udp end key_len 0 queues end / end
+    flow validate 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end
+    flow validate 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end
+    flow validate 0 ingress pattern eth / ipv4 / end actions rss types ipv6 end key_len 0 queues end / end
+    flow validate 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 l3-src-only end key_len 0 queues end / end
+    flow validate 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types eth end key_len 0 queues end / end
+
+   check all the rule failed to be validated.
+
+Test Case: multirules test
+==========================
+Launch testpmd without "--disable-rss"
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/TCP(sport=30,dport=32)/("X" * 80)], iface="enp175s0f0", count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=30)/("X" * 80)], iface="enp175s0f0", count=100)
-        testpmd> stop
+Subcase 1: two rules with same pattern but different hash input set, not hit default profile
+--------------------------------------------------------------------------------------------
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-   
-Test case: SYMMETRIC_TOEPLITZ_IPV6_SCTP:
-========================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+1. create a MAC_IPV4_UDP_L3_SRC_ONLY rule::
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss func symmetric_toeplitz types ipv6-sctp end key_len 0 queues end / end
-        testpmd>start
+     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end
+     testpmd> flow list 0
 
-#. to send ip pkts with fix IPV6  pkts with fixed address and includ IPV6 frag and sctp port::
+   check the rule exists in the list.
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/SCTP(sport=30,dport=32)/("X" * 80)], iface="enp175s0f0", count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=30)/("X" * 80)], iface="enp175s0f0", count=100)
-        testpmd> stop
+2. send a MAC_IPV4_UDP packet::
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
 
-Test case: SYMMETRIC_TOEPLITZ_IPV6_ICMP:
-========================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+   change the field [Source IP], send a packet::
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end key_len 0 queues end / end
-        testpmd>start
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
 
-#. to send ip pkts with fix IPV6  pkts with fixed address and includ IPV6 frag and ICMP port::
+   check the hash value is different from the first packet.
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/ICMP()/("X" * 80)], iface="enp175s0f0", count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X" * 80)], iface="enp175s0f0", count=100)
-        testpmd> stop
+3. create a rule with same pattern but different hash input set::
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
+     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end
+     testpmd> flow list 0
 
-Test case: SYMMETRIC_TOEPLITZ_NVGRE_IPV4:
-=========================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV4 keywords::
+   check the rule exists in the list.
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end 
-        testpmd>start
+4. send a MAC_IPV4_UDP packet::
 
-#. to send ip pkts with fix nvgre pkts with fixed address and includ frag::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
 
-        sendp([Ether()/IP()/NVGRE()/Ether()/IP(src="192.168.0.8",dst="192.168.0.69",frag=6)/("X"*480)], iface="enp175s0f0", count=100)
-        sendp([Ether()/IP()/NVGRE()/Ether()/IP(src="192.168.0.69",dst="192.168.0.8",frag=6)/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+   change the field [Source IP], send a packet::
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-Test case: SYMMETRIC_TOEPLITZ_VXLAN_IPV4:
-=========================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV4 keywords::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end 
-        testpmd>start
+   check the hash value is the same as the first packet.
+   change the field [Dest IP], send a packet::
 
-#. to send ip pkts with fix vxlan pkts with fixed address and includ frag::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.7")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/("X"*480)], iface="enp175s0f0", count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+   check the hash value is different from the first packet.
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
- 
-Test case: SYMMETRIC_TOEPLITZ_NVGRE_IPV4_UDP:
-=============================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV4 keywords::
+5. destroy the rule 1::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end
-        testpmd>start
+     testpmd> flow destroy 0 rule 1
+     testpmd> flow list 0
 
-#. to send ip pkts with fix nvgre pkts with fixed address and includ frag and udp ports::
+   check the rule 1 not exists in the list.
+   send a MAC_IPV4_UDP packet, you can find it hit default ipv4 profile::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="8.8.8.1",dst="5.6.8.2")/UDP(sport=20,dport=22)/("X"*480)],iface="enp175s0f0",count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="5.6.8.2",dst="8.8.8.1")/UDP(sport=22,dport=20)/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-Test case: SYMMETRIC_TOEPLITZ_NVGRE_SCTP:
-=========================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV4 keywords::
+   change the fields [Source IP] or [Dest IP], send a packet::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss func symmetric_toeplitz types ipv4-sctp end key_len 0 queues end / end
-        testpmd>start
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.9")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.9")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
 
-#. to send ip pkts with fix nvgre pkts with fixed address and includ frag and sctp ports::
+   check the hash values of the last two packets are different from the first packet.
+   destroy the rule 0::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="8.8.8.1",dst="5.6.8.2")/SCTP(sport=20,dport=22)/("X"*480)],iface="enp175s0f0",count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="5.6.8.2",dst="8.8.8.1")/SCTP(sport=22,dport=20)/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+     testpmd> flow destroy 0 rule 0
+     testpmd> flow list 0
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-Test case: SYMMETRIC_TOEPLITZ_NVGRE_IPV4_TCP:
-=============================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV4 keywords::
+   check the rule 0 not exists in the list.
+   send a MAC_IPV4_UDP packet, you can find it hit default ipv4 profile::
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_len 0 queues end / end
-        testpmd>start
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
 
-#. to send ip pkts with fix nvgre pkts with fixed address and includ frag and tcp ports::
+   change the fields [Source IP] or [Dest IP], send a packet::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="8.8.8.1",dst="5.6.8.2")/TCP(sport=20,dport=22)/("X"*480)],iface="enp175s0f0",count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="5.6.8.2",dst="8.8.8.1")/TCP(sport=22,dport=20)/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.9")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.9")/UDP(dport=45)/Raw("x"*480)], iface="ens786f0")
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-Test case: SYMMETRIC_TOEPLITZ_NVGRE_IPV4_ICMP:
-==============================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV4 keywords::
+   check the hash values of the last two packets are different from the first packet.
 
-        testpmd>flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end
-        testpmd>start
+Subcase 2: two rules with same pattern but different hash input set, hit default profile
+----------------------------------------------------------------------------------------
 
-#. to send ip pkts with fix nvgre pkts with fixed address and includ frag and icmp ports::
+1. create a MAC_IPV4_PAY_L3_SRC_ONLY rule::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src="8.8.8.1",dst="5.6.8.2")/ICMP()/("X"*480)],iface="enp175s0f0",count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src="5.6.8.2",dst="8.8.8.1")/ICMP()/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+     testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
+     testpmd> flow list 0
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
- 
-Test case: SYMMETRIC_TOEPLITZ_NVGRE_IPV6:
-=========================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+   check the rule exists in the list.
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end
-        testpmd>start
+2. send a MAC_IPV4_PAY packet::
 
-#. to send ipv6 pkts with fix nvgre pkts with fixed address::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*480)], iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X"*480)],iface="enp175s0f0",count=100)
+   change the field [Source IP], send a packet::
 
-#. to send ip pkts with fix IPv6 includ frag and switch src and dst ip address::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/Raw("x"*480)], iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+   check the hash value is different from the first packet.
+   change the field [Dest IP], send a packet::
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
- 
-Test case: SYMMETRIC_TOEPLITZ_NVGRE_IPV6_UDP:
-================================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.8")/Raw("x"*480)], iface="ens786f0")
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp end key_len 0 queues end / end
-        testpmd>start
+   check the hash value is the same as the first packet.
 
-#. to send ipv6 pkts with fix nvgre pkts with fixed address and includ ipv6 frag and UDP ports::
+3. create a rule with same pattern but different hash input set::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=30,dport=32)/("X"*480)],iface="enp175s0f0",count=100)
+     testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
+     testpmd> flow list 0
 
-#. to send ip pkts with fix IPv6 includ frag and switch src and dst ip address and udp ports::
+   check the rule exists in the list.
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=33)/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+4. send a MAC_IPV4_PAY packet::
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
- 
-   
-Test case: SYMMETRIC_TOEPLITZ_NVGRE_IPV6_TCP:
-=============================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*480)], iface="ens786f0")
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end
-        testpmd>start
+   change the field [Source IP], send a packet::
 
-#. to send ipv6 pkts with fix nvgre pkts with fixed address and includ ipv6 frag and tcp ports::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/Raw("x"*480)], iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/TCP(sport=30,dport=32)/("X"*480)],iface="enp175s0f0",count=100)
+   check the hash value is the same as the first packet.
+   change the field [Dst IP], send a packet::
 
-#. to send ip pkts with fix IPv6 includ frag and switch src and dst ip address and tcp ports::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.7")/Raw("x"*480)], iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=33)/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
-        verify 100 pkts has sent, and check the rss hash with a fixed value.
- 
-Test case: SYMMETRIC_TOEPLITZ_NVGRE_IPV6_SCTP
-==============================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+   check the hash value is different from the first packet.
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss func symmetric_toeplitz types ipv6-sctp end key_len 0 queues end / end
-        testpmd>start
+5. destroy the rule 1::
 
-#. to send ipv6 pkts with fix nvgre pkts with fixed address and includ ipv6 frag and SCTP ports::
+     testpmd> flow destroy 0 rule 1
+     testpmd> flow list 0
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/SCTP(sport=30,dport=32)/("X"*480)],iface="enp175s0f0",count=100)
+   check the rule 1 not exists in the list.
+   send the MAC_IPV4_PAY packet::
 
-#. to send ip pkts with fix IPv6 includ frag and switch src and dst ip address and SCTP ports::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*480)], iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=33)/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+   check the hash value is not exist.
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-  
-Test case: SYMMETRIC_TOEPLITZ_NVGRE_IPV6_ICMP:
-==============================================
-#.  create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+Subcase 3: two rules, scope smaller created first, and the larger one created later
+-----------------------------------------------------------------------------------
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end
-        testpmd>start
+1. create a MAC_IPV4_UDP_PAY_L4_SRC_ONLY rule::
 
-#. to send ipv6 pkts with fix nvgre pkts with fixed address and includ ipv6 frag and ICMP ports::
+     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end
+     testpmd> flow list 0
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/ICMP()/("X"*480)],iface="enp175s0f0",count=100)
+   check the rule exists in the list.
 
-#. to send ip pkts with fix IPv6 includ frag and switch src and dst ip address and ICMP ports::
+2. send a MAC_IPV4_UDP_PAY packet::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)], iface="ens786f0")
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
- 
-Test case: SYMMETRIC_TOEPLITZ_VXLAN_IPV6_UDP:
-=============================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+   change the field [Source Port], send a packet::
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp end key_len 0 queues end / end
-        testpmd>start
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=25, dport=45)/Raw("x"*480)], iface="ens786f0")
 
-#. to send ipv6 pkts with fix vxlan pkts with fixed address and includ ipv6 frag and UDP ports::
+   check the hash value is different from the first packet.
+   change other fields, send a packet::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=30,dport=32)/("X"*480)],iface="enp175s0f0",count=100)
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.8")/UDP(sport=23, dport=44)/Raw("x"*480)], iface="ens786f0")
 
-#. to send VXLAN pkts with fix IPv6 includ frag and switch src and dst ip address and UDP ports::
+   check the hash value is the same as the first packet.
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=33)/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+3. create a MAC_IPV4_PAY_L3_SRC_ONLY rule::
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-Test case: SYMMETRIC_TOEPLITZ_VXLAN_IPV6:
-=========================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+     testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
+     testpmd> flow list 0
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end
-        testpmd>start
+   check the rule exists in the list.
 
-#. to send ipv6 pkts with fix vxlan pkts with fixed address and includ ipv6 frag::
+4. send a MAC_IPV4_UDP_PAY packet::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X"*480)],iface="enp175s0f0",count=100)
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)], iface="ens786f0")
 
-#. to send VXLAN pkts with fix IPv6 includ frag and switch src and dst ip address::
+   change the field [Source IP], send a packet::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)], iface="ens786f0")
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
+   check the hash value is different from the first packet.
+   change other fields, send a packet::
 
-Test case: SYMMETRIC_TOEPLITZ_VXLAN_IPV6_TCP:
-=============================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.8")/UDP(sport=25, dport=99)/Raw("x"*480)], iface="ens786f0")
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end
-        testpmd>start
+   check the hash value is the same as the first packet.
 
-#. to send ipv6 pkts with fix vxlan pkts with fixed address and includ ipv6 frag and tcp ports::
+5. destroy the rule 1::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/TCP(sport=30,dport=32)/("X"*480)],iface="enp175s0f0",count=100)
+     testpmd> flow destroy 0 rule 1
+     testpmd> flow list 0
 
-#. to send VXLAN pkts with fix IPv6 includ frag and switch src and dst ip address and tcp ports::
+   check the rule 1 not exists in the list.
+   repeat step 2, get the same result.
+   destroy the rule 0::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=33)/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+     testpmd> flow destroy 0 rule 0
+     testpmd> flow list 0
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
- 
-Test case: SYMMETRIC_TOEPLITZ_VXLAN_IPV6_SCTP:
-==============================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+   send a MAC_IPV4_UDP_PAY packet, check the hash values not exists.
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss func symmetric_toeplitz types ipv6-sctp end key_len 0 queues end / end
-        testpmd>start
+Subcase 4: two rules, scope larger created first, and the smaller one created later
+-----------------------------------------------------------------------------------
 
-#. to send ipv6 pkts with fix vxlan pkts with fixed address and includ ipv6 frag and sctp ports::
+1. create a MAC_IPV4_PAY_L3_SRC_ONLY rule::
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/SCTP(sport=30,dport=32)/("X"*480)],iface="enp175s0f0",count=100)
+     testpmd> flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
+     testpmd> flow list 0
 
-#. to send VXLAN pkts with fix IPv6 includ frag and switch src and dst ip address and sctp ports::
+   check the rule exists in the list.
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=30)/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+2. send a MAC_IPV4_UDP_PAY packet::
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-Test case: SYMMETRIC_TOEPLITZ_VXLAN_IPV6_ICMP:
-==============================================
-#. create rule for the rss type symmetric_toeplitz and hash IPV6 keywords::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)], iface="ens786f0")
 
-        testpmd>flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end
-        testpmd>start
+   change the field [Source IP], send a packet::
 
-#. to send ipv6 pkts with fix vxlan pkts with fixed address and includ ipv6 frag and ICMP ports::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)], iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/ICMP()/("X"*480)],iface="enp175s0f0",count=100)
+   check the hash value is different from the first packet.
+   change other fields, send a packet::
 
-#. to send VXLAN pkts with fix IPv6 includ frag and switch src and dst ip address and icmp ports::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.8")/UDP(sport=25, dport=99)/Raw("x"*480)], iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)],iface="enp175s0f0",count=100)
-        testpmd> stop
+   check the hash value is the same as the first packet.
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value
-   
-Test case: SIMPLE_XOR:
-======================
-#. create rule for the rss type simple_xor::
+3. create a MAC_IPV4_UDP_PAY_L3_SRC_ONLY rule::
 
-        testpmd>flow create 0 ingress pattern end actions rss func simple_xor key_len 0 queues end / end
-        testpmd>start
-   
-Test case: SIMPLE_XOR_IPV4:
-===========================
-#. to send IPV4 pkt with fixed IP and switch IP src and dst address and switch the upd, tcp, sctp, icpm ports::
+     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end
+     testpmd> flow list 0
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="1.1.4.1",dst="2.2.2.3")/("X"*480)], iface="enp175s0f0", count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IP(src="2.2.2.3",dst="1.1.4.1")/("X"*480)], iface="enp175s0f0", count=100)
-        testpmd> stop
+   check the rule exists in the list.
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-Verbose log::
+4. send a MAC_IPV4_UDP_PAY packet::
 
-   src=A4:BF:01:68:D2:03 - dst=68:05:CA:A3:28:94 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0x3030602 - RSS queue=0x2 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x2 ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)], iface="ens786f0")
 
-   src=A4:BF:01:68:D2:03 - dst=68:05:CA:A3:28:94 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0x3030602 - RSS queue=0x2 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x2 ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
-   
-Check the RSS value wiht a same value and the packets enter to a queue
-	 
-statistics log::
+   change the field [Source Port], send a packet::
 
-   ------- Forward Stats for RX Port= 0/Queue= 2 -> TX Port= 0/Queue= 2 -------
-   RX-packets: 200            TX-packets: 0              TX-dropped: 0
-   
-   ---------------------- Forward statistics for port 0  ----------------------
-   RX-packets: 200            RX-dropped: 0             RX-total: 200
-   TX-packets: 0              TX-dropped: 0             TX-total: 0
-   ----------------------------------------------------------------------------
-   
-   +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
-   RX-packets: 200            RX-dropped: 0             RX-total: 200
-   TX-packets: 0              TX-dropped: 0             TX-total: 0
-   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=25, dport=45)/Raw("x"*480)], iface="ens786f0")
 
+   check the hash value is different from the first packet.
+   change other fields, send a packet::
 
-SIMPLE_XOR_IPV6:
-================
-#. to send IPV6 pkt with fixed IP and switch IP src and dst address and switch the upd, tcp, sctp, icpm ports::
+     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.8")/UDP(sport=23, dport=44)/Raw("x"*480)], iface="ens786f0")
 
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X" * 80)], iface="enp175s0f0", count=100)
-        sendp([Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X" * 80)], iface="enp175s0f0", count=100)
-        testpmd> stop
+   check the hash value is the same as the first packet.
 
-#. verify 100 pkts has sent, and check the rss hash with a fixed value.
-   
-Verbose log::
+5. destroy the rule 1::
 
-   src=00:00:00:00:00:00 - dst=68:05:CA:A3:28:94 - type=0x86dd - length=134 - nb_segs=1 - RSS hash=0x5c24be5 - RSS queue=0x25 - hw ptype: L2_ETHER L3_IPV6_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV6  - l2_len=14 - l3_len=40 - Receive queue=0x25 ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+     testpmd> flow destroy 0 rule 1
+     testpmd> flow list 0
 
-   src=00:00:00:00:00:00 - dst=68:05:CA:A3:28:94 - type=0x86dd - length=134 - nb_segs=1 - RSS hash=0x5c24be5 - RSS queue=0x25 - hw ptype: L2_ETHER L3_IPV6_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV6  - l2_len=14 - l3_len=40 - Receive queue=0x25 ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+   check the rule 1 not exists in the list.
+   repeat step 2, hit ipv4 profile, get the same result.
+   destroy the rule 0::
 
-statistics log::
+     testpmd> flow destroy 0 rule 0
+     testpmd> flow list 0
 
-   ------- Forward Stats for RX Port= 0/Queue=37 -> TX Port= 0/Queue=37 -------
-   RX-packets: 200            TX-packets: 0              TX-dropped: 0
-   
-   ---------------------- Forward statistics for port 0  ----------------------
-   RX-packets: 200            RX-dropped: 0             RX-total: 200
-   TX-packets: 0              TX-dropped: 0             TX-total: 0
-   ----------------------------------------------------------------------------
-   
-   +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
-   RX-packets: 200            RX-dropped: 0             RX-total: 200
-   TX-packets: 0              TX-dropped: 0             TX-total: 0
-   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   send a MAC_IPV4_UDP_PAY packet, check the hash values not exists.
