test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH v1] test_plans/cvl_advanced_rss_pppoe: split pppoe case
@ 2021-03-25  5:07 Hailin Xu
  2021-03-25  7:24 ` Tu, Lijuan
  0 siblings, 1 reply; 2+ messages in thread
From: Hailin Xu @ 2021-03-25  5:07 UTC (permalink / raw)
  To: dts; +Cc: Hailin Xu

split pppoe case and modify suite name.

Signed-off-by: Hailin Xu <hailinx.xu@intel.com>
---
 ...t => cvl_advanced_rss_pppoe_test_plan.rst} | 3373 ++++++-----------
 1 file changed, 1090 insertions(+), 2283 deletions(-)
 rename test_plans/{cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst => cvl_advanced_rss_pppoe_test_plan.rst} (81%)

diff --git a/test_plans/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst b/test_plans/cvl_advanced_rss_pppoe_test_plan.rst
similarity index 81%
rename from test_plans/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst
rename to test_plans/cvl_advanced_rss_pppoe_test_plan.rst
index 543eb94a..994e10ce 100644
--- a/test_plans/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst
+++ b/test_plans/cvl_advanced_rss_pppoe_test_plan.rst
@@ -30,14 +30,14 @@
    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    OF THE POSSIBILITY OF SUCH DAMAGE.
 
-=================================================
-CVL: Advanced RSS FOR PPPOE/VLAN/ESP/AH/L2TP/PFCP
-=================================================
+===========================
+CVL: Advanced RSS FOR PPPOE
+===========================
 
 Description
 ===========
 
-* Enable RSS for PPPOE/VLAN/ESP/AH/L2TP/PFCP packets.
+* Enable RSS for PPPOE packets.
 * Symmetric hash for PPPOE packets.
 * Simple_xor hash for PPPOE packets.
 
@@ -68,42 +68,6 @@ Pattern and input set
     |                               +---------------------------+----------------------------------------------------------------------------------+
     |                               | MAC_PPPOE_PAY             | eth, l2-src-only, l2-dst-only, pppoe                                             |
     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_VLAN_IPV4_PAY         | c-vlan                                                                           |
-    |                               +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_VLAN_IPV4_UDP_PAY     | c-vlan                                                                           |
-    |                               +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_VLAN_IPV4_TCP_PAY     | c-vlan                                                                           |
-    |                               +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_VLAN_IPV4_SCTP_PAY    | c-vlan                                                                           |
-    |             VLAN              +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_VLAN_IPV6_PAY         | c-vlan                                                                           |
-    |                               +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_VLAN_IPV6_UDP_PAY     | c-vlan                                                                           |
-    |                               +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_VLAN_IPV6_TCP_PAY     | c-vlan                                                                           |
-    |                               +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_VLAN_IPV6_SCTP_PAY    | c-vlan                                                                           |
-    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_ESP              | esp                                                                              |
-    |                               +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_UDP_ESP          | esp                                                                              |
-    |             ESP               +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV6_ESP              | esp                                                                              |
-    |                               +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV6_UDP_ESP          | esp                                                                              |
-    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_AH               | ah                                                                               |
-    |              AH               +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV6_AH               | ah                                                                               |
-    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_L2TPv3           | l2tpv3                                                                           |
-    |             L2TP              +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV6_L2TPv3           | l2tpv3                                                                           |
-    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV4_PFCP_SESSION     | pfcp                                                                             |
-    |             PFCP              +---------------------------+----------------------------------------------------------------------------------+
-    |                               | MAC_IPV6_PFCP_SESSION     | pfcp                                                                             |
-    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+
 
 .. note::
 
@@ -142,11 +106,18 @@ Prerequisites
    - dpdk: http://dpdk.org/git/dpdk
    - scapy: http://www.secdev.org/projects/scapy/
 
-3. Copy comm #1 package to /lib/firmware/intel/ice/ddp/ice.pkg,
-   then load driver::
+3. DDP Package Preparation::
+
+   - copy correct ``ice.pkg`` into ``/lib/firmware/updates/intel/ice/ddp/``.
+   - unbind, then bind device back to ice.ko to update ddp package in the NIC.
 
-     rmmod ice
-     insmod ice.ko
+.. warning::
+
+   Need unbind all ports in NIC, then bind device back to ice.ko
+
+.. note::
+
+   Of test all test cases, only comms package is expected.
 
 4. Bind pf to dpdk driver::
 
@@ -174,12 +145,26 @@ Prerequisites
       >>> sys.path.append('/root')
       >>> from pfcp import PFCP
 
-Test case: MAC_IPV4_PFCP_SESSION
-================================
+Test case: MAC_PPPOE_PAY
+========================
+
+.. Note::
+
+ - For PPPOE control packets, the hash input set should be
+   src mac address + PPP session id, so only add LCP/IPCP packets to the
+   L2_SRC_ONLY and SESSION_ID subcases in the case.
+
+packets mismatched the pattern::
+
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
+
+Subcase 1: MAC_PPPOE_PAY_L2_SRC_ONLY
+------------------------------------
 
-1. validate a rule for RSS type of MAC_IPV4_PFCP_SESSION::
+1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -191,92 +176,61 @@ Test case: MAC_IPV4_PFCP_SESSION
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_IPV4_PFCP_SESSION::
+2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_IPV4_PFCP_SESSION packet::
+   * MAC_PPPOE_PAY packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [SEID], send a packet::
+     change the field [Source MAC], send a packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=2)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
 
      check the hash value is different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:54")/IP(src="192.168.0.25",dst="192.168.0.23")/UDP(sport=23,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern::
-
-     sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)],iface="ens786f0")
-     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=22,dport=25)/Raw("x"*80)],iface="ens786f0")
-
-   check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Test case: MAC_IPV6_PFCP_SESSION
-================================
-
-1. validate a rule for RSS type of MAC_IPV6_PFCP_SESSION::
-
-     testpmd> flow validate 0 ingress pattern eth / ipv6 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
+   * MAC_PPPOE_LCP_PAY packet::
 
-     testpmd> flow list 0
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
-   check the rule not exists in the list.
+     change the field [Source MAC], send a packet::
 
-2. create a rule for RSS type of MAC_IPV6_PFCP_SESSION::
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
-     testpmd> flow create 0 ingress pattern eth / ipv6 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end
-     testpmd> flow list 0
+     check the hash value is different from the first packet.
+     change other fields, send packets::
 
-   check the rule exists in the list.
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
-3. send matched packets
+     check the hash values are the same as the first packet.
 
-   * MAC_IPV6_PFCP_SESSION packet::
+   * MAC_PPPOE_IPCP_PAY packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
-     change the field [SEID], send a packet::
+     change the field [Source MAC], send a packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=2)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
      check the hash value is different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=23,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern::
-
-     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)],iface="ens786f0")
-     sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=25)/Raw("x"*80)],iface="ens786f0")
-
-   check the hash values not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
@@ -286,12 +240,12 @@ Test case: MAC_IPV6_PFCP_SESSION
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_IPV4_L2TPv3
-==========================
+Subcase 2: MAC_PPPOE_PAY_L2_DST_ONLY
+------------------------------------
 
-1. validate a rule for RSS type of MAC_IPV4_L2TPv3::
+1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -303,36 +257,31 @@ Test case: MAC_IPV4_L2TPv3
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_IPV4_L2TPv3::
+2. create a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_IPV4_L2TPv3 packet::
+   * MAC_PPPOE_PAY packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5", proto=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [session_id], send a packet::
+     change the field [Dest MAC], send a packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.4", proto=115)/L2TP('\x00\x00\x00\x12')/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
 
      check the hash value is different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.5",dst="192.168.0.7", proto=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern::
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
 
-     sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
-     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=22,dport=25)/Raw("x"*80)],iface="ens786f0")
+   check the hash values are the same as the first packet.
 
-   check the hash values not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
@@ -342,12 +291,12 @@ Test case: MAC_IPV4_L2TPv3
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_IPV6_L2TPv3
-==========================
+Subcase 3: MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY
+------------------------------------------------
 
-1. validate a rule for RSS type of MAC_IPV6_L2TPv3::
+1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / ipv6 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth end key_len 0 queues end / end
 
    get the message::
 
@@ -359,36 +308,33 @@ Test case: MAC_IPV6_L2TPv3
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_IPV6_L2TPv3::
+2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / ipv6 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_IPV6_L2TPv3 packet::
+   * MAC_PPPOE_PAY packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [session_id], send a packet::
+     change the fields [Source MAC][Dest MAC], send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=115)/L2TP('\x00\x00\x00\x12')/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
 
-     check the hash value is different from the first packet.
+     check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023", nh=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern::
-
-     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5", proto=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
-     sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=25)/Raw("x"*80)],iface="ens786f0")
-
-   check the hash values not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
@@ -398,12 +344,12 @@ Test case: MAC_IPV6_L2TPv3
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_IPV4_ESP
-=======================
+Subcase 4: MAC_PPPOE_PAY_SESSION_ID
+-----------------------------------
 
-1. validate a rule for RSS type of MAC_IPV4_ESP::
+1. validate a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::
 
-     testpmd> flow validate 0 ingress pattern eth / ipv4 / esp / end actions rss types esp end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types pppoe end key_len 0 queues end / end
 
    get the message::
 
@@ -415,36 +361,46 @@ Test case: MAC_IPV4_ESP
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_IPV4_ESP::
+2. create a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::
 
-     testpmd> flow create 0 ingress pattern eth / ipv4 / esp / end actions rss types esp end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types pppoe end key_len 0 queues end / end
      testpmd> flow list 0
 
-   check the rule exists in the list
+   check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_IPV4_ESP packet::
+   * MAC_PPPOE_LCP_PAY packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
-     change the field [spi], send a packet::
+     change the field [Session ID], send a packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=50)/ESP(spi=12)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
      check the hash value is different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.4",dst="192.168.0.7",proto=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
+
+     check the hash values are the same as the first packet.
 
-   check the hash values are the same as the first packet.
+   * MAC_PPPOE_IPCP_PAY packet::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
+
+     change the field [Session ID], send a packet::
 
-4. send packets mismatched the pattern::
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
+
+     check the hash value is different from the first packet.
+     change other fields, send packets::
 
-     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5", proto=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
-     sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=50)/ESP(spi=12)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
+
+     check the hash values are the same as the first packet.
 
-   check the hash values not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
@@ -454,12 +410,12 @@ Test case: MAC_IPV4_ESP
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_IPV4_UDP_ESP
-===========================
+Subcase 5: MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID
+-----------------------------------------------
 
-1. validate a rule for RSS type of MAC_IPV4_UDP_ESP::
+1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::
 
-     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / esp / end actions rss types esp end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only pppoe end key_len 0 queues end / end
 
    get the message::
 
@@ -471,37 +427,50 @@ Test case: MAC_IPV4_UDP_ESP
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_IPV4_UDP_ESP::
+2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::
 
-     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / esp / end actions rss types esp end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only pppoe end key_len 0 queues end / end
      testpmd> flow list 0
 
-   check the rule exists in the list
+   check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_IPV4_UDP_ESP packet::
+   * MAC_PPPOE_LCP_PAY packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
-     change the field [spi], send a packet::
+     change the fields [Source MAC][Session ID], send a packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=4500)/ESP(spi=12)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
-     check the hash value is different from the first packet.
+     check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.4",dst="192.168.0.7")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern::
+   * MAC_PPPOE_IPCP_PAY packet::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
+
+     change the fields [Source MAC][Session ID], send a packet::
+
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
+
+     check the hash values are different from the first packet.
+     change other fields, send packets::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
 
-     sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
-     sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
+     check the hash values are the same as the first packet.
 
-   check the hash values not exist.
+4. send packets mismatched the rule, check the hash values not exist.
 
 5. destroy the rule::
 
@@ -511,12 +480,22 @@ Test case: MAC_IPV4_UDP_ESP
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_IPV6_ESP
-=======================
+Test case: MAC_PPPOE_IPV4_PAY
+=============================
+
+packets mismatched the pattern::
+
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=5)/Raw("x"*80)],iface="ens786f0")
+
+Subcase 1: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY
+-----------------------------------------
 
-1. validate a rule for RSS type of MAC_IPV6_ESP::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / ipv6 / esp / end actions rss types esp end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -528,36 +507,46 @@ Test case: MAC_IPV6_ESP
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_IPV6_ESP::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / ipv6 / esp / end actions rss types esp end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
-   check the rule exists in the list
+   check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_IPV6_ESP packet::
+   * MAC_PPPOE_IPV4_PAY packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
-     change the field [spi], send a packet::
+     change the field [Source MAC], send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=50)/ESP(spi=12)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
-     check the hash value is different from the first packet.
+     check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023", nh=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern::
+   * MAC_PPPOE_IPV4_FRAG packet::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
+
+     change the field [Source MAC], send packets::
+
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are different from the first packet.
+     change other fields, send packets::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
 
-     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
-     sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+     check the hash values are the same as the first packet.
 
-   check the hash values not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
@@ -567,12 +556,12 @@ Test case: MAC_IPV6_ESP
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_IPV6_UDP_ESP
-===========================
+Subcase 2: MAC_PPPOE_IPV4_PAY_L2_DST_ONLY
+-----------------------------------------
 
-1. validate a rule for RSS type of MAC_IPV6_UDP_ESP::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / ipv6 / udp / esp / end actions rss types esp end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -584,37 +573,46 @@ Test case: MAC_IPV6_UDP_ESP
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_IPV6_UDP_ESP::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / ipv6 / udp / esp / end actions rss types esp end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
-   check the rule exists in the list
+   check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_IPV6_UDP_ESP packet::
+   * MAC_PPPOE_IPV4_PAY packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
-     change the field [spi], send a packet::
+     change the field [Dest MAC], send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(dport=4500)/ESP(spi=12)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
-     check the hash value is different from the first packet.
+     check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern::
+   * MAC_PPPOE_IPV4_FRAG packet::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
+
+     change the field [Dest MAC], send packets::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are different from the first packet.
+     change other fields, send packets::
+
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
 
-     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
-     sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-     sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
+     check the hash values are the same as the first packet.
 
-   check the hash values not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
@@ -624,12 +622,12 @@ Test case: MAC_IPV6_UDP_ESP
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_IPV4_AH
-======================
+Subcase 3: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY
+-----------------------------------------------------
 
-1. validate a rule for RSS type of MAC_IPV4_AH::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / ipv4 / ah / end actions rss types ah end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth end key_len 0 queues end / end
 
    get the message::
 
@@ -641,999 +639,46 @@ Test case: MAC_IPV4_AH
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_IPV4_AH::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / ipv4 / ah / end actions rss types ah end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_IPV4_AH packet::
+   * MAC_PPPOE_IPV4_PAY packet::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
-     change the field [spi], send a packet::
+     change the fields [Source MAC][Dest MAC], send packets::
 
-       sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=51)/AH(spi=12)/Raw("x"*480)], iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
-     check the hash value is different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.4",dst="192.168.0.8",proto=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern::
-
-     sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-     sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
-
-   check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Test case: MAC_IPV6_AH
-======================
-
-1. validate a rule for RSS type of MAC_IPV6_AH::
-
-     testpmd> flow validate 0 ingress pattern eth / ipv6 / ah / end actions rss types ah end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_IPV6_AH::
-
-     testpmd> flow create 0 ingress pattern eth / ipv6 / ah / end actions rss types ah end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_IPV6_AH packet::
-
-       sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
-
-     change the field [spi], send a packet::
-
-       sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=51)/AH(spi=12)/Raw("x"*480)], iface="ens786f0")
-
-     check the hash value is different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023", nh=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern::
-
-     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
-     sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-
-   check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Test case: MAC_PPPOE_PAY
-========================
-
-Note: For PPPOE control packets, the hash input set should be
-src mac address + PPP session id, so only add LCP/IPCP packets to the
-L2_SRC_ONLY and SESSION_ID subcases in the case.
-
-packets mismatched the pattern::
-
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-Subcase 1: MAC_PPPOE_PAY_L2_SRC_ONLY
-------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Source MAC], send a packet::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash value is different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_LCP_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     change the field [Source MAC], send a packet::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash value is different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPCP_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     change the field [Source MAC], send a packet::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash value is different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 2: MAC_PPPOE_PAY_L2_DST_ONLY
-------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-dst-only end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-dst-only end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Dest MAC], send a packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash value is different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
-
-   check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 3: MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY
-------------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
-
-     change the fields [Source MAC][Dest MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 4: MAC_PPPOE_PAY_SESSION_ID
-===================================
-
-1. validate a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types pppoe end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types pppoe end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_LCP_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     change the field [Session ID], send a packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash value is different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPCP_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     change the field [Session ID], send a packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash value is different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 5: MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID
------------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only pppoe end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only pppoe end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_LCP_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     change the fields [Source MAC][Session ID], send a packet::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPCP_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     change the fields [Source MAC][Session ID], send a packet::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the rule, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Test case: MAC_PPPOE_IPV4_PAY
-=============================
-
-packets mismatched the pattern::
-
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-Subcase 1: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY
------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_IPV4_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Source MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPV4_FRAG packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Source MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 2: MAC_PPPOE_IPV4_PAY_L2_DST_ONLY
------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_IPV4_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Dest MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPV4_FRAG packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Dest MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 3: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY
------------------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_IPV4_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     change the fields [Source MAC][Dest MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPV4_FRAG packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     change the fields [Source MAC][Dest MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 4: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY
------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_IPV4_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Source IP], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:54", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPV4_FRAG packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Source IP], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:54", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7", frag=3)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 5: MAC_PPPOE_IPV4_PAY_L3_DST_ONLY
------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_IPV4_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Dest IP], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.7", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPV4_FRAG packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Dest IP], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.7", dst="192.168.1.2", frag=3)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 6: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY
------------------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_IPV4_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55",dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     change the fields [Source IP][Dest IP], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53",dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPV4_FRAG packet::
-
-       sendp([Ether(src="00:11:22:33:44:55",dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     change the fields [Source IP][Dest IP], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7", frag=5)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7", frag=5)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53",dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=3)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Test case: MAC_PPPOE_IPV4_UDP_PAY
-=================================
-
-packets mismatched the pattern::
-
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-
-Subcase 1: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY
----------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_IPV4_UDP_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Source MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 2: MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY
----------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_IPV4_UDP_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Dest MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 3: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
----------------------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end
-     testpmd> flow list 0
+     check the hash values are different from the first packet.
+     change other fields, send packets::
 
-   check the rule exists in the list.
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
 
-3. send matched packets
+     check the hash values are the same as the first packet.
 
-   * MAC_PPPOE_IPV4_UDP_PAY packet::
+   * MAC_PPPOE_IPV4_FRAG packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
 
      change the fields [Source MAC][Dest MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -1647,12 +692,12 @@ Subcase 3: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 4: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY
----------------------------------------------
+Subcase 4: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY
+-----------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -1664,27 +709,42 @@ Subcase 4: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV4_UDP_PAY packet::
+   * MAC_PPPOE_IPV4_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
      change the field [Source IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:54", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are the same as the first packet.
+
+   * MAC_PPPOE_IPV4_FRAG packet::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
+
+     change the field [Source IP], send packets::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are different from the first packet.
+     change other fields, send packets::
+
+       sendp([Ether(src="00:11:22:33:44:54", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7", frag=3)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -1698,12 +758,12 @@ Subcase 4: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 5: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY
----------------------------------------------
+Subcase 5: MAC_PPPOE_IPV4_PAY_L3_DST_ONLY
+-----------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -1715,78 +775,42 @@ Subcase 5: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV4_UDP_PAY packet::
+   * MAC_PPPOE_IPV4_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
      change the field [Dest IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.7", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 6: MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY
----------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_IPV4_UDP_PAY packet::
+   * MAC_PPPOE_IPV4_FRAG packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source Port], send packets::
+     change the field [Dest IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3", frag=5)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.7", dst="192.168.1.2", frag=3)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -1800,12 +824,12 @@ Subcase 6: MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 7: MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY
----------------------------------------------
+Subcase 6: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY
+-----------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end
 
    get the message::
 
@@ -1817,80 +841,46 @@ Subcase 7: MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l4-dst-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> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV4_UDP_PAY packet::
+   * MAC_PPPOE_IPV4_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55",dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Dest Port], send packets::
+     change the fields [Source IP][Dest IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53",dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern, check the hash values not exist.
-
-5. destroy the rule::
-
-     testpmd> flow destroy 0 rule 0
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-   send the matched packets, check the hash values of the packets are not exist.
-
-Subcase 8: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
----------------------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end
-
-   get the message::
-
-     Flow rule validated
-
-   check the flow list::
-
-     testpmd> flow list 0
-
-   check the rule not exists in the list.
-
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_IPV4_UDP_PAY packet::
+   * MAC_PPPOE_IPV4_FRAG packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55",dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Source Port], send packets::
+     change the fields [Source IP][Dest IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7", frag=5)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7", frag=5)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.9")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53",dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=3)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -1904,12 +894,21 @@ Subcase 8: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
----------------------------------------------------------
+Test case: MAC_PPPOE_IPV4_UDP_PAY
+=================================
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
+packets mismatched the pattern::
 
-     testpmd> flow validate 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
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+
+Subcase 1: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY
+---------------------------------------------
+
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::
+
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -1921,9 +920,9 @@ Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::
 
-     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> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -1934,16 +933,14 @@ Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Dest Port], send packets::
+     change the field [Source MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -1957,12 +954,12 @@ Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
-----------------------------------------------------------
+Subcase 2: MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -1974,9 +971,9 @@ Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -1987,16 +984,14 @@ Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Dest IP][Source Port], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+     change the field [Dest MAC], send packets::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2010,12 +1005,12 @@ Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
-----------------------------------------------------------
+Subcase 3: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
+---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end
 
    get the message::
 
@@ -2027,9 +1022,9 @@ Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / 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 / pppoes / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -2040,18 +1035,18 @@ Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Dest IP][Dest Port], send packets::
+     change the fields [Source MAC][Dest MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
-   check the hash values are the same as the first packet.
+     check the hash values are the same as the first packet.
 
 4. send packets mismatched the pattern, check the hash values not exist.
 
@@ -2063,12 +1058,12 @@ Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 12: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY
-----------------------------------------------------------------------------------
+Subcase 4: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2080,9 +1075,9 @@ Subcase 12: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -2093,18 +1088,14 @@ Subcase 12: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
+     change the field [Source IP], send packets::
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2118,12 +1109,12 @@ Subcase 12: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4
----------------------------------------
+Subcase 5: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2135,9 +1126,9 @@ Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -2148,16 +1139,14 @@ Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Dest IP], send packets::
+     change the field [Dest IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2171,21 +1160,12 @@ Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_PPPOE_IPV4_TCP_PAY
-=================================
-
-packets mismatched the pattern::
-
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-
-Subcase 1: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY
+Subcase 6: MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY
 ---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2197,27 +1177,27 @@ Subcase 1: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV4_TCP_PAY packet::
+   * MAC_PPPOE_IPV4_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source MAC], send packets::
+     change the field [Source Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2231,12 +1211,12 @@ Subcase 1: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 2: MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY
+Subcase 7: MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY
 ---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2248,27 +1228,27 @@ Subcase 2: MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV4_TCP_PAY packet::
+   * MAC_PPPOE_IPV4_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Dest MAC], send packets::
+     change the field [Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2282,12 +1262,12 @@ Subcase 2: MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 3: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
+Subcase 8: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
 ---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2299,29 +1279,29 @@ Subcase 3: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV4_TCP_PAY packet::
+   * MAC_PPPOE_IPV4_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source MAC][Dest MAC], send packets::
+     change the fields [Source IP][Source Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.9")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2335,12 +1315,12 @@ Subcase 3: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 4: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY
----------------------------------------------
+Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
+---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end
+     testpmd> flow validate 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
 
    get the message::
 
@@ -2352,27 +1332,29 @@ Subcase 4: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end
+     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> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV4_TCP_PAY packet::
+   * MAC_PPPOE_IPV4_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source IP], send packets::
+     change the fields [Source IP][Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2386,12 +1368,12 @@ Subcase 4: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 5: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY
----------------------------------------------
+Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
+----------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2403,27 +1385,29 @@ Subcase 5: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV4_TCP_PAY packet::
+   * MAC_PPPOE_IPV4_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Dest IP], send packets::
+     change the fields [Dest IP][Source Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2437,12 +1421,12 @@ Subcase 5: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 6: MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY
----------------------------------------------
+Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
+----------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l4-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2454,29 +1438,31 @@ Subcase 6: MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l4-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV4_TCP_PAY packet::
+   * MAC_PPPOE_IPV4_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source Port], send packets::
+     change the fields [Dest IP][Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     check the hash values are the same as the first packet.
+   check the hash values are the same as the first packet.
 
 4. send packets mismatched the pattern, check the hash values not exist.
 
@@ -2488,12 +1474,12 @@ Subcase 6: MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 7: MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY
----------------------------------------------
+Subcase 12: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY
+----------------------------------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l4-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end
 
    get the message::
 
@@ -2505,27 +1491,31 @@ Subcase 7: MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l4-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV4_TCP_PAY packet::
+   * MAC_PPPOE_IPV4_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Dest Port], send packets::
+     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=19)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2539,12 +1529,12 @@ Subcase 7: MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 8: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
----------------------------------------------------------
+Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4
+---------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end
 
    get the message::
 
@@ -2556,29 +1546,29 @@ Subcase 8: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV4_TCP_PAY packet::
+   * MAC_PPPOE_IPV4_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Source Port], send packets::
+     change the fields [Source IP][Dest IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.9")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2592,12 +1582,21 @@ Subcase 8: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
----------------------------------------------------------
+Test case: MAC_PPPOE_IPV4_TCP_PAY
+=================================
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
+packets mismatched the pattern::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+
+Subcase 1: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY
+---------------------------------------------
+
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::
+
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2609,9 +1608,9 @@ Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -2622,16 +1621,14 @@ Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Dest Port], send packets::
+     change the field [Source MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2645,12 +1642,12 @@ Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
-----------------------------------------------------------
+Subcase 2: MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2662,9 +1659,9 @@ Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -2675,16 +1672,14 @@ Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Dest IP][Source Port], send packets::
+     change the field [Dest MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2698,12 +1693,12 @@ Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
-----------------------------------------------------------
+Subcase 3: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
+---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end
 
    get the message::
 
@@ -2715,9 +1710,9 @@ Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -2728,16 +1723,16 @@ Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Dest IP][Dest Port], send packets::
+     change the fields [Source MAC][Dest MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=90)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=25,dport=90)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2751,12 +1746,12 @@ Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 12: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY
-----------------------------------------------------------------------------------
+Subcase 4: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2768,9 +1763,9 @@ Subcase 12: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -2781,18 +1776,14 @@ Subcase 12: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
+     change the field [Source IP], send packets::
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.5")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2806,22 +1797,12 @@ Subcase 12: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_PPPOE_IPV6_PAY
-=============================
-
-packets mismatched the pattern::
-
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
-
-Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY
------------------------------------------
+Subcase 5: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2833,42 +1814,27 @@ Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Source MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash value is different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPV6_FRAG packet::
+   * MAC_PPPOE_IPV4_TCP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source MAC], send packets::
+     change the fields [Dest IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     check the hash value is different from the first packet.
+     check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2882,12 +1848,12 @@ Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY
------------------------------------------
+Subcase 6: MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2899,42 +1865,27 @@ Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l4-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Dest MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash value is different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPV6_FRAG packet::
+   * MAC_PPPOE_IPV4_TCP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Dest MAC], send packets::
+     change the field [Source Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     check the hash value is different from the first packet.
+     check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -2948,12 +1899,12 @@ Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 3: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY
------------------------------------------------------
+Subcase 7: MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l4-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -2965,46 +1916,27 @@ Subcase 3: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l4-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Source MAC][Dest MAC], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash value is different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPV6_FRAG packet::
+   * MAC_PPPOE_IPV4_TCP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source MAC][Dest MAC], send packets::
+     change the field [Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=19)/Raw("x"*80)],iface="ens786f0")
 
-     check the hash value is different from the first packet.
+     check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3018,12 +1950,12 @@ Subcase 3: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY
------------------------------------------
+Subcase 8: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
+---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3035,42 +1967,29 @@ Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end
-     testpmd> flow list 0
-
-   check the rule exists in the list.
-
-3. send matched packets
-
-   * MAC_PPPOE_IPV6_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Source IP], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
 
-     check the hash value is different from the first packet.
-     change other fields, send packets::
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow list 0
 
-       sendp([Ether(src="00:11:22:33:44:54", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens786f0")
+   check the rule exists in the list.
 
-     check the hash values are the same as the first packet.
+3. send matched packets
 
-   * MAC_PPPOE_IPV6_FRAG packet::
+   * MAC_PPPOE_IPV4_TCP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source IP], send packets::
+     change the fields [Source IP][Source Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     check the hash value is different from the first packet.
+     check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:54", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.9")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3084,12 +2003,12 @@ Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY
------------------------------------------
+Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
+---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3101,42 +2020,29 @@ Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-     change the field [Dest IP], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPV6_FRAG packet::
+   * MAC_PPPOE_IPV4_TCP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Dest IP], send packets::
+     change the fields [Source IP][Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3150,12 +2056,12 @@ Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 6: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY
------------------------------------------------------
+Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
+----------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3167,46 +2073,29 @@ Subcase 6: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_PAY packet::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-     change the fields [Source IP][Dest IP], send packets::
-
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are different from the first packet.
-     change other fields, send packets::
-
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
-
-     check the hash values are the same as the first packet.
-
-   * MAC_PPPOE_IPV6_FRAG packet::
+   * MAC_PPPOE_IPV4_TCP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Dest IP], send packets::
+     change the fields [Dest IP][Source Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3220,21 +2109,12 @@ Subcase 6: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_PPPOE_IPV6_UDP_PAY
-=================================
-
-packets mismatched the pattern::
-
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-
-Subcase 1: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY
----------------------------------------------
+Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
+----------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3246,27 +2126,29 @@ Subcase 1: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_UDP_PAY packet::
+   * MAC_PPPOE_IPV4_TCP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source MAC], send packets::
+     change the fields [Dest IP][Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=90)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=25,dport=90)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3280,12 +2162,12 @@ Subcase 1: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 2: MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY
----------------------------------------------
+Subcase 12: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY
+----------------------------------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end
 
    get the message::
 
@@ -3297,27 +2179,31 @@ Subcase 2: MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_UDP_PAY packet::
+   * MAC_PPPOE_IPV4_TCP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Dest MAC], send packets::
+     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.5")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3331,12 +2217,22 @@ Subcase 2: MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 3: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
----------------------------------------------------------
+Test case: MAC_PPPOE_IPV6_PAY
+=============================
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
+packets mismatched the pattern::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY
+-----------------------------------------
+
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::
+
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3348,29 +2244,42 @@ Subcase 3: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_UDP_PAY packet::
+   * MAC_PPPOE_IPV6_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source MAC][Dest MAC], send packets::
+     change the field [Source MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
 
-     check the hash values are different from the first packet.
+     check the hash value is different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are the same as the first packet.
+
+   * MAC_PPPOE_IPV6_FRAG packet::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     change the field [Source MAC], send packets::
+
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     check the hash value is different from the first packet.
+     change other fields, send packets::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3384,12 +2293,12 @@ Subcase 3: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 4: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY
----------------------------------------------
+Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY
+-----------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3401,27 +2310,42 @@ Subcase 4: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_UDP_PAY packet::
+   * MAC_PPPOE_IPV6_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source IP], send packets::
+     change the field [Dest MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
 
-     check the hash values are different from the first packet.
+     check the hash value is different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are the same as the first packet.
+
+   * MAC_PPPOE_IPV6_FRAG packet::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     change the field [Dest MAC], send packets::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     check the hash value is different from the first packet.
+     change other fields, send packets::
+
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3435,12 +2359,12 @@ Subcase 4: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 5: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY
----------------------------------------------
-
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::
+Subcase 3: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY
+-----------------------------------------------------
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::
+
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth end key_len 0 queues end / end
 
    get the message::
 
@@ -3452,27 +2376,46 @@ Subcase 5: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_UDP_PAY packet::
+   * MAC_PPPOE_IPV6_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Dest IP], send packets::
+     change the field [Source MAC][Dest MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
 
-     check the hash values are different from the first packet.
+     check the hash value is different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are the same as the first packet.
+
+   * MAC_PPPOE_IPV6_FRAG packet::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     change the field [Source MAC][Dest MAC], send packets::
+
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     check the hash value is different from the first packet.
+     change other fields, send packets::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3486,12 +2429,12 @@ Subcase 5: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 6: MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
----------------------------------------------
+Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY
+-----------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3503,27 +2446,42 @@ Subcase 6: MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_UDP_PAY packet::
+   * MAC_PPPOE_IPV6_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source Port], send packets::
+     change the field [Source IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
 
-     check the hash values are different from the first packet.
+     check the hash value is different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:54", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are the same as the first packet.
+
+   * MAC_PPPOE_IPV6_FRAG packet::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     change the field [Source IP], send packets::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     check the hash value is different from the first packet.
+     change other fields, send packets::
+
+       sendp([Ether(src="00:11:22:33:44:54", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3537,12 +2495,12 @@ Subcase 6: MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 7: MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY
----------------------------------------------
+Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY
+-----------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3554,27 +2512,42 @@ Subcase 7: MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_UDP_PAY packet::
+   * MAC_PPPOE_IPV6_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Dest Port], send packets::
+     change the field [Dest IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are the same as the first packet.
+
+   * MAC_PPPOE_IPV6_FRAG packet::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     change the field [Dest IP], send packets::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are different from the first packet.
+     change other fields, send packets::
+
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3588,12 +2561,12 @@ Subcase 7: MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 8: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
----------------------------------------------------------
+Subcase 6: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY
+-----------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end
 
    get the message::
 
@@ -3605,29 +2578,46 @@ Subcase 8: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_UDP_PAY packet::
+   * MAC_PPPOE_IPV6_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Source Port], send packets::
+     change the fields [Source IP][Dest IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are the same as the first packet.
+
+   * MAC_PPPOE_IPV6_FRAG packet::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     change the fields [Source IP][Dest IP], send packets::
+
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
+
+     check the hash values are different from the first packet.
+     change other fields, send packets::
+
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3641,12 +2631,21 @@ Subcase 8: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
----------------------------------------------------------
+Test case: MAC_PPPOE_IPV6_UDP_PAY
+=================================
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
+packets mismatched the pattern::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+
+Subcase 1: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY
+---------------------------------------------
+
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::
+
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3658,9 +2657,9 @@ Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -3671,18 +2670,16 @@ Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Dest Port], send packets::
+     change the field [Source MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
-   check the hash values are the same as the first packet.
+     check the hash values are the same as the first packet.
 
 4. send packets mismatched the pattern, check the hash values not exist.
 
@@ -3694,12 +2691,12 @@ Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
-----------------------------------------------------------
+Subcase 2: MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3711,9 +2708,9 @@ Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -3724,18 +2721,16 @@ Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Dest IP][Source Port], send packets::
+     change the field [Dest MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
-   check the hash values are the same as the first packet.
+     check the hash values are the same as the first packet.
 
 4. send packets mismatched the pattern, check the hash values not exist.
 
@@ -3747,12 +2742,12 @@ Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
-----------------------------------------------------------
+Subcase 3: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
+---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end
 
    get the message::
 
@@ -3764,9 +2759,9 @@ Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -3777,16 +2772,16 @@ Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Dest IP][Dest Port], send packets::
+     change the fields [Source MAC][Dest MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3800,12 +2795,12 @@ Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 12: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY
-----------------------------------------------------------------------------------
+Subcase 4: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3817,9 +2812,9 @@ Subcase 12: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -3830,18 +2825,14 @@ Subcase 12: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
+     change the field [Source IP], send packets::
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3855,21 +2846,12 @@ Subcase 12: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_PPPOE_IPV6_TCP_PAY
-=================================
-
-packets mismatched the pattern::
-
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-
-Subcase 1: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY
+Subcase 5: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY
 ---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3881,27 +2863,27 @@ Subcase 1: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_TCP_PAY packet::
+   * MAC_PPPOE_IPV6_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source MAC], send packets::
+     change the field [Dest IP], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3915,12 +2897,12 @@ Subcase 1: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 2: MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY
+Subcase 6: MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
 ---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3932,27 +2914,27 @@ Subcase 2: MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_TCP_PAY packet::
+   * MAC_PPPOE_IPV6_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Dest MAC], send packets::
+     change the field [Source Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -3966,12 +2948,12 @@ Subcase 2: MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 3: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
----------------------------------------------------------
+Subcase 7: MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -3983,29 +2965,27 @@ Subcase 3: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_TCP_PAY packet::
+   * MAC_PPPOE_IPV6_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source MAC][Dest MAC], send packets::
+     change the field [Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -4019,12 +2999,12 @@ Subcase 3: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 4: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY
----------------------------------------------
+Subcase 8: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
+---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4036,27 +3016,29 @@ Subcase 4: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_TCP_PAY packet::
+   * MAC_PPPOE_IPV6_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source IP], send packets::
+     change the fields [Source IP][Source Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -4070,12 +3052,12 @@ Subcase 4: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 5: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY
----------------------------------------------
+Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
+---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4087,29 +3069,31 @@ Subcase 5: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_TCP_PAY packet::
+   * MAC_PPPOE_IPV6_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Dest IP], send packets::
+     change the fields [Source IP][Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     check the hash values are the same as the first packet.
+   check the hash values are the same as the first packet.
 
 4. send packets mismatched the pattern, check the hash values not exist.
 
@@ -4121,12 +3105,12 @@ Subcase 5: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 6: MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY
----------------------------------------------
+Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
+----------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l4-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4138,29 +3122,31 @@ Subcase 6: MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l4-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_TCP_PAY packet::
+   * MAC_PPPOE_IPV6_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Source Port], send packets::
+     change the fields [Dest IP][Source Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
-     check the hash values are the same as the first packet.
+   check the hash values are the same as the first packet.
 
 4. send packets mismatched the pattern, check the hash values not exist.
 
@@ -4172,12 +3158,12 @@ Subcase 6: MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 7: MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY
----------------------------------------------
+Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
+----------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l4-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4189,27 +3175,29 @@ Subcase 7: MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l4-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_TCP_PAY packet::
+   * MAC_PPPOE_IPV6_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [Dest Port], send packets::
+     change the fields [Dest IP][Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -4223,12 +3211,12 @@ Subcase 7: MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 8: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
----------------------------------------------------------
+Subcase 12: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY
+----------------------------------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end
 
    get the message::
 
@@ -4240,29 +3228,31 @@ Subcase 8: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_PPPOE_IPV6_TCP_PAY packet::
+   * MAC_PPPOE_IPV6_UDP_PAY packet::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Source Port], send packets::
+     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -4276,12 +3266,21 @@ Subcase 8: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
----------------------------------------------------------
+Test case: MAC_PPPOE_IPV6_TCP_PAY
+=================================
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
+packets mismatched the pattern::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+  sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+
+Subcase 1: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY
+---------------------------------------------
+
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::
+
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4293,9 +3292,9 @@ Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -4306,16 +3305,14 @@ Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Dest Port], send packets::
+     change the field [Source MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -4329,12 +3326,12 @@ Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
-----------------------------------------------------------
+Subcase 2: MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4346,9 +3343,9 @@ Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -4359,16 +3356,14 @@ Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Dest IP][Source Port], send packets::
+     change the field [Dest MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -4382,12 +3377,12 @@ Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
-----------------------------------------------------------
+Subcase 3: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
+---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth end key_len 0 queues end / end
 
    get the message::
 
@@ -4399,9 +3394,9 @@ Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -4412,16 +3407,16 @@ Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Dest IP][Dest Port], send packets::
+     change the fields [Source MAC][Dest MAC], send packets::
 
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -4435,12 +3430,12 @@ Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Subcase 12: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY
-----------------------------------------------------------------------------------
+Subcase 4: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4452,9 +3447,9 @@ Subcase 12: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
@@ -4465,18 +3460,14 @@ Subcase 12: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
+     change the field [Source IP], send packets::
 
        sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
-       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
@@ -4490,12 +3481,12 @@ Subcase 12: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON
    check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_VLAN_IPV4_PAY
-============================
+Subcase 5: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_VLAN_IPV4_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4507,50 +3498,46 @@ Test case: MAC_VLAN_IPV4_PAY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_VLAN_IPV4_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_VLAN_IPV4_PAY packet::
+   * MAC_PPPOE_IPV6_TCP_PAY packet::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [VLAN ID], send packets::
+     change the field [Dest IP], send packets::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     check the hash value is different from the first packet.
+     check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="10:22:33:44:55:99", dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.3", dst="192.168.1.4")/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern::
-
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x" * 80)],iface="ens786f0",count=1)
-
-  check the hash values not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
      testpmd> flow destroy 0 rule 0
      testpmd> flow list 0
 
-   check the rule not exists.
+   check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_VLAN_IPV4_UDP_PAY
-================================
+Subcase 6: MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_VLAN_IPV4_UDP_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / udp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4562,51 +3549,46 @@ Test case: MAC_VLAN_IPV4_UDP_PAY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_VLAN_IPV4_UDP_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / udp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l4-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_VLAN_IPV4_UDP_PAY packet::
+   * MAC_PPPOE_IPV6_TCP_PAY packet::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [VLAN ID], send packets::
+     change the field [Source Port], send packets::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="10:22:33:44:55:99", dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.3", dst="192.168.1.4")/UDP(sport=19,dport=99)/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash values are the same as as the first packet.
-
-4. send packets mismatched the pattern::
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+     check the hash values are the same as the first packet.
 
-   check the hash values of the packets not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
      testpmd> flow destroy 0 rule 0
      testpmd> flow list 0
 
-   check the rule not exists.
+   check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_VLAN_IPV4_TCP_PAY
-================================
+Subcase 7: MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY
+---------------------------------------------
 
-1. validate a rule for RSS type of MAC_VLAN_IPV4_TCP_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / tcp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l4-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4618,51 +3600,46 @@ Test case: MAC_VLAN_IPV4_TCP_PAY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_VLAN_IPV4_TCP_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / tcp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l4-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_VLAN_IPV4_TCP_PAY packet::
+   * MAC_PPPOE_IPV6_TCP_PAY packet::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [VLAN ID], send packets::
+     change the field [Dest Port], send packets::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="10:22:33:44:55:99", dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.3", dst="192.168.1.4")/TCP(sport=19,dport=99)/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash values are the same as as the first packet.
-
-4. send packets mismatched the pattern::
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+     check the hash values are the same as the first packet.
 
-   check the hash values of the packets not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
      testpmd> flow destroy 0 rule 0
      testpmd> flow list 0
 
-   check the rule not exists.
+   check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_VLAN_IPV4_SCTP_PAY
-=================================
+Subcase 8: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
+---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_VLAN_IPV4_SCTP_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / sctp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4674,51 +3651,48 @@ Test case: MAC_VLAN_IPV4_SCTP_PAY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_VLAN_IPV4_SCTP_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / sctp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only l4-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_VLAN_IPV4_SCTP_PAY packet::
+   * MAC_PPPOE_IPV6_TCP_PAY packet::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/SCTP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [VLAN ID], send packets::
+     change the fields [Source IP][Source Port], send packets::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/SCTP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="10:22:33:44:55:99", dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.3", dst="192.168.1.5")/SCTP(sport=19,dport=99)/Raw("x" * 80)],iface="ens786f0",count=1)
-
-     check the hash values are the same as as the first packet.
-
-4. send packets mismatched the pattern::
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/SCTP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+     check the hash values are the same as the first packet.
 
-   check the hash values of the packets not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
      testpmd> flow destroy 0 rule 0
      testpmd> flow list 0
 
-   check the rule not exists.
+   check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_VLAN_IPV6_PAY
-============================
+Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
+---------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_VLAN_IPV6_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4730,50 +3704,48 @@ Test case: MAC_VLAN_IPV6_PAY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_VLAN_IPV6_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_VLAN_IPV6_PAY packet::
+   * MAC_PPPOE_IPV6_TCP_PAY packet::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [VLAN ID], send packets::
+     change the fields [Source IP][Dest Port], send packets::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="10:22:33:44:55:99", dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("y" * 80)],iface="ens786f0",count=1)
-
-   check the hash values are the same as the first packet.
-
-4. send packets mismatched the pattern::
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x" * 80)],iface="ens786f0",count=1)
+     check the hash values are the same as the first packet.
 
-  check the hash values not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
      testpmd> flow destroy 0 rule 0
      testpmd> flow list 0
 
-   check the rule not exists.
+   check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_VLAN_IPV6_UDP_PAY
-================================
+Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
+----------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_VLAN_IPV6_UDP_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / udp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4785,51 +3757,48 @@ Test case: MAC_VLAN_IPV6_UDP_PAY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_VLAN_IPV6_UDP_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / udp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_VLAN_IPV6_UDP_PAY packet::
+   * MAC_PPPOE_IPV6_TCP_PAY packet::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [VLAN ID], send packets::
+     change the fields [Dest IP][Source Port], send packets::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="10:22:33:44:55:99", dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=23,dport=99)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern::
-
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
-
-  check the hash values not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
      testpmd> flow destroy 0 rule 0
      testpmd> flow list 0
 
-   check the rule not exists.
+   check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_VLAN_IPV6_TCP_PAY
-================================
+Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
+----------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_VLAN_IPV6_TCP_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
 
-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / tcp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
 
    get the message::
 
@@ -4841,51 +3810,48 @@ Test case: MAC_VLAN_IPV6_TCP_PAY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_VLAN_IPV6_TCP_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
 
-     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / tcp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_VLAN_IPV6_TCP_PAY packet::
+   * MAC_PPPOE_IPV6_TCP_PAY packet::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [VLAN ID], send packets::
+     change the fields [Dest IP][Dest Port], send packets::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="10:22:33:44:55:99", dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern::
-
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
-
-  check the hash values not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
      testpmd> flow destroy 0 rule 0
      testpmd> flow list 0
 
-   check the rule not exists.
+   check the rule not exists in the list.
    send the matched packets, check the hash values of the packets are not exist.
 
-Test case: MAC_VLAN_IPV6_SCTP_PAY
-=================================
+Subcase 12: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY
+----------------------------------------------------------------------------------
 
-1. validate a rule for RSS type of MAC_VLAN_IPV6_SCTP_PAY::
+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::
 
-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / sctp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end
 
    get the message::
 
@@ -4897,44 +3863,43 @@ Test case: MAC_VLAN_IPV6_SCTP_PAY
 
    check the rule not exists in the list.
 
-2. create a rule for RSS type of MAC_VLAN_IPV6_SCTP_PAY::
+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::
 
-     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / sctp / end actions rss types c-vlan end key_len 0 queues end / end
+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end
      testpmd> flow list 0
 
    check the rule exists in the list.
 
 3. send matched packets
 
-   * MAC_VLAN_IPV6_SCTP_PAY packet::
+   * MAC_PPPOE_IPV6_TCP_PAY packet::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/SCTP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
-     change the field [VLAN ID], send packets::
+     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
 
-       sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/SCTP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
+       sendp([Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are different from the first packet.
      change other fields, send packets::
 
-       sendp([Ether(src="10:22:33:44:55:99", dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/SCTP(sport=25,dport=99)/Raw("x" * 80)],iface="ens786f0",count=1)
+       sendp([Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
 
      check the hash values are the same as the first packet.
 
-4. send packets mismatched the pattern::
-
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192.168.1.1", dst="192.168.1.2")/SCTP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
-     sendp([Ether(src="10:22:33:44:55:66", dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x" * 80)],iface="ens786f0",count=1)
-
-  check the hash values not exist.
+4. send packets mismatched the pattern, check the hash values not exist.
 
 5. destroy the rule::
 
      testpmd> flow destroy 0 rule 0
      testpmd> flow list 0
 
-   check the rule not exists.
-   send the matched packets, check the hash values the packets are not exist.
+   check the rule not exists in the list.
+   send the matched packets, check the hash values of the packets are not exist.
 
 Test case: MAC_VLAN_PPPOE_PAY (not supported in 20.08)
 ======================================================
@@ -6017,161 +4982,3 @@ Subcase 4: two rules, scope larger created first, and the smaller one created la
 
    send a MAC_PPPOE_IPV4_UDP_PAY packet, check the hash values not exists.
 
-Test case: negative cases
-=========================
-
-Subcase 1: wrong hash input set
--------------------------------
-
-1. validate a rule with wrong input set::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types l2-src-only l2-dst-only end key_len 0 queues end / end
-
-   get the error message::
-
-     Invalid input set: Invalid argument
-
-   create a rule with wrong hash input set::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types l2-src-only l2-dst-only end key_len 0 queues end / end
-
-   Failed to create flow, report error message::
-
-     Invalid input set: Invalid argument
-
-2. validate a rule with wrong hash type::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end
-
-   get the error message::
-
-     Invalid input set: Invalid argument
-
-   create a rule with wrong hash type::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end
-
-   Failed to create flow, report error message::
-
-     Invalid input set: Invalid argument
-
-3. validate a rule with wrong symmetric hash input set::
-
-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp l3-src-only end key_len 0 queues end / end
-
-   get the error message::
-
-     Invalid input set: Invalid argument
-
-   create a rule with wrong symmetric hash input set::
-
-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp l3-src-only end key_len 0 queues end / end
-
-   Failed to create flow, report error message::
-
-     Invalid input set: Invalid argument
-
-4. check the rule list::
-
-     testpmd> flow list 0
-
-  there is no listed.
-
-Subcase 2: void action
-----------------------
-
-1. validate a rule with void action::
-
-     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / pfcp / end actions end
-
-   get the error message::
-
-     NULL action.: Invalid argument
-
-   create a rule with void action::
-
-     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions end
-
-   Failed to create flow, report message::
-
-     NULL action.: Invalid argument
-
-2. check the rule list::
-
-     testpmd> flow list 0
-
-   there is no rule listed.
-
-Subcase 3: delete a non-existing rule
--------------------------------------
-
-1. show the rule list of port 0::
-
-     testpmd> flow list 0
-
-   There is no rule listed.
-
-2. destroy rule 0 of port 0::
-
-     testpmd> flow destroy 0 rule 0
-
-   There is no error message reported.
-
-3. flush rules of port 0::
-
-     testpmd> flow flush 0
-
-   There is no error message reported.
-
-Subcase 4: unsupported pattern with OS default package
-------------------------------------------------------
-
-1. load os default package and launch testpmd as step 3-5 in Prerequisites.
-
-2. validate unsupported patterns in OS default package::
-
-     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end
-     testpmd> flow validate 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end
-     testpmd> flow validate 0 ingress pattern eth / ipv4 / esp / end actions rss types esp end key_len 0 queues end / end
-     testpmd> flow validate 0 ingress pattern eth / ipv4 / ah / end actions rss types ah end key_len 0 queues end / end
-
-   get the error message::
-
-     Invalid input pattern: Invalid argument
-
-3. create unsupported patterns in OS default package::
-
-     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end
-     testpmd> flow create 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end
-     testpmd> flow create 0 ingress pattern eth / ipv4 / esp / end actions rss types esp end key_len 0 queues end / end
-     testpmd> flow create 0 ingress pattern eth / ipv4 / ah / end actions rss types ah end key_len 0 queues end / end
-
-4. check the rule list::
-
-     testpmd> flow list 0
-
-   there is no rule listed.
-
-Subcase 5: invalid port
------------------------
-
-1. create a rule with invalid port::
-
-     testpmd> flow create 1 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end
-
-   Failed to create flow, report message::
-
-    No such device: No such device
-
-2. check the rule list on port 0::
-
-     testpmd> flow list 0
-
-   there is no rule listed.
-   check on port 1::
-
-     testpmd> flow list 1
-
-   get the error message::
-
-     Invalid port 1
-- 
2.17.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [dts] [PATCH v1] test_plans/cvl_advanced_rss_pppoe: split pppoe case
  2021-03-25  5:07 [dts] [PATCH v1] test_plans/cvl_advanced_rss_pppoe: split pppoe case Hailin Xu
@ 2021-03-25  7:24 ` Tu, Lijuan
  0 siblings, 0 replies; 2+ messages in thread
From: Tu, Lijuan @ 2021-03-25  7:24 UTC (permalink / raw)
  To: Xu, HailinX, dts; +Cc: Xu, HailinX



> -----Original Message-----
> From: dts <dts-bounces@dpdk.org> On Behalf Of Hailin Xu
> Sent: 2021年3月25日 13:08
> To: dts@dpdk.org
> Cc: Xu, HailinX <hailinx.xu@intel.com>
> Subject: [dts] [PATCH v1] test_plans/cvl_advanced_rss_pppoe: split pppoe case
> 
> split pppoe case and modify suite name.

Where are the other cases: vlan, esp, ah, l2tp, pfcp, I only see pppoe cases in cvl_advanced_rss_pppoe_test_plan.rst.

> 
> Signed-off-by: Hailin Xu <hailinx.xu@intel.com>
> ---
>  ...t => cvl_advanced_rss_pppoe_test_plan.rst} | 3373 ++++++-----------
>  1 file changed, 1090 insertions(+), 2283 deletions(-)
>  rename
> test_plans/{cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst =>
> cvl_advanced_rss_pppoe_test_plan.rst} (81%)
> 
> diff --git
> a/test_plans/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst
> b/test_plans/cvl_advanced_rss_pppoe_test_plan.rst
> similarity index 81%
> rename from
> test_plans/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst
> rename to test_plans/cvl_advanced_rss_pppoe_test_plan.rst
> index 543eb94a..994e10ce 100644
> --- a/test_plans/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst
> +++ b/test_plans/cvl_advanced_rss_pppoe_test_plan.rst
> @@ -30,14 +30,14 @@
>     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
>     OF THE POSSIBILITY OF SUCH DAMAGE.
> 
> -=================================================
> -CVL: Advanced RSS FOR PPPOE/VLAN/ESP/AH/L2TP/PFCP
> -=================================================
> +===========================
> +CVL: Advanced RSS FOR PPPOE
> +===========================
> 
>  Description
>  ===========
> 
> -* Enable RSS for PPPOE/VLAN/ESP/AH/L2TP/PFCP packets.
> +* Enable RSS for PPPOE packets.
>  * Symmetric hash for PPPOE packets.
>  * Simple_xor hash for PPPOE packets.
> 
> @@ -68,42 +68,6 @@ Pattern and input set
>      |                               +---------------------------+------------------------------------------
> ----------------------------------------+
>      |                               | MAC_PPPOE_PAY             | eth, l2-src-only, l2-dst-only,
> pppoe                                             |
>      +-------------------------------+---------------------------+--------------------------------
> --------------------------------------------------+
> -    |                               | MAC_VLAN_IPV4_PAY         | c-vlan
> |
> -    |                               +---------------------------+------------------------------------------
> ----------------------------------------+
> -    |                               | MAC_VLAN_IPV4_UDP_PAY     | c-vlan
> |
> -    |                               +---------------------------+------------------------------------------
> ----------------------------------------+
> -    |                               | MAC_VLAN_IPV4_TCP_PAY     | c-vlan
> |
> -    |                               +---------------------------+------------------------------------------
> ----------------------------------------+
> -    |                               | MAC_VLAN_IPV4_SCTP_PAY    | c-vlan
> |
> -    |             VLAN              +---------------------------+--------------------------------------
> --------------------------------------------+
> -    |                               | MAC_VLAN_IPV6_PAY         | c-vlan
> |
> -    |                               +---------------------------+------------------------------------------
> ----------------------------------------+
> -    |                               | MAC_VLAN_IPV6_UDP_PAY     | c-vlan
> |
> -    |                               +---------------------------+------------------------------------------
> ----------------------------------------+
> -    |                               | MAC_VLAN_IPV6_TCP_PAY     | c-vlan
> |
> -    |                               +---------------------------+------------------------------------------
> ----------------------------------------+
> -    |                               | MAC_VLAN_IPV6_SCTP_PAY    | c-vlan
> |
> -    +-------------------------------+---------------------------+-------------------------------
> ---------------------------------------------------+
> -    |                               | MAC_IPV4_ESP              | esp
> |
> -    |                               +---------------------------+------------------------------------------
> ----------------------------------------+
> -    |                               | MAC_IPV4_UDP_ESP          | esp
> |
> -    |             ESP               +---------------------------+----------------------------------------
> ------------------------------------------+
> -    |                               | MAC_IPV6_ESP              | esp
> |
> -    |                               +---------------------------+------------------------------------------
> ----------------------------------------+
> -    |                               | MAC_IPV6_UDP_ESP          | esp
> |
> -    +-------------------------------+---------------------------+-------------------------------
> ---------------------------------------------------+
> -    |                               | MAC_IPV4_AH               | ah
> |
> -    |              AH               +---------------------------+----------------------------------------
> ------------------------------------------+
> -    |                               | MAC_IPV6_AH               | ah
> |
> -    +-------------------------------+---------------------------+-------------------------------
> ---------------------------------------------------+
> -    |                               | MAC_IPV4_L2TPv3           | l2tpv3
> |
> -    |             L2TP              +---------------------------+---------------------------------------
> -------------------------------------------+
> -    |                               | MAC_IPV6_L2TPv3           | l2tpv3
> |
> -    +-------------------------------+---------------------------+-------------------------------
> ---------------------------------------------------+
> -    |                               | MAC_IPV4_PFCP_SESSION     | pfcp
> |
> -    |             PFCP              +---------------------------+---------------------------------------
> -------------------------------------------+
> -    |                               | MAC_IPV6_PFCP_SESSION     | pfcp
> |
> -    +-------------------------------+---------------------------+-------------------------------
> ---------------------------------------------------+
> 
>  .. note::
> 
> @@ -142,11 +106,18 @@ Prerequisites
>     - dpdk: http://dpdk.org/git/dpdk
>     - scapy: http://www.secdev.org/projects/scapy/
> 
> -3. Copy comm #1 package to /lib/firmware/intel/ice/ddp/ice.pkg,
> -   then load driver::
> +3. DDP Package Preparation::
> +
> +   - copy correct ``ice.pkg`` into ``/lib/firmware/updates/intel/ice/ddp/``.
> +   - unbind, then bind device back to ice.ko to update ddp package in the NIC.
> 
> -     rmmod ice
> -     insmod ice.ko
> +.. warning::
> +
> +   Need unbind all ports in NIC, then bind device back to ice.ko
> +
> +.. note::
> +
> +   Of test all test cases, only comms package is expected.
> 
>  4. Bind pf to dpdk driver::
> 
> @@ -174,12 +145,26 @@ Prerequisites
>        >>> sys.path.append('/root')
>        >>> from pfcp import PFCP
> 
> -Test case: MAC_IPV4_PFCP_SESSION
> -================================
> +Test case: MAC_PPPOE_PAY
> +========================
> +
> +.. Note::
> +
> + - For PPPOE control packets, the hash input set should be
> +   src mac address + PPP session id, so only add LCP/IPCP packets to the
> +   L2_SRC_ONLY and SESSION_ID subcases in the case.
> +
> +packets mismatched the pattern::
> +
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*80)]
> ,iface="ens786f0")
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> +
> +Subcase 1: MAC_PPPOE_PAY_L2_SRC_ONLY
> +------------------------------------
> 
> -1. validate a rule for RSS type of MAC_IPV4_PFCP_SESSION::
> +1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / pfcp / end actions
> rss types pfcp end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -191,92 +176,61 @@ Test case: MAC_IPV4_PFCP_SESSION
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_IPV4_PFCP_SESSION::
> +2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions
> rss types pfcp end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_IPV4_PFCP_SESSION packet::
> +   * MAC_PPPOE_PAY packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ")/UDP(sport=22,dport=8805)/PFCP(Sfield=1,
> SEID=1)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [SEID], send a packet::
> +     change the field [Source MAC], send a packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ")/UDP(sport=22,dport=8805)/PFCP(Sfield=1,
> SEID=2)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash value is different from the first packet.
>       change other fields, send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:54")/IP(src="192.168.0.25",dst="192.168.0.23
> ")/UDP(sport=23,dport=8805)/PFCP(Sfield=1,
> SEID=1)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern::
> -
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=8805)
> /PFCP(Sfield=1, SEID=1)/Raw("x"*80)],iface="ens786f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ")/UDP(sport=22,dport=25)/Raw("x"*80)],iface="ens786f0")
> -
> -   check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Test case: MAC_IPV6_PFCP_SESSION
> -================================
> -
> -1. validate a rule for RSS type of MAC_IPV6_PFCP_SESSION::
> -
> -     testpmd> flow validate 0 ingress pattern eth / ipv6 / udp / pfcp / end actions
> rss types pfcp end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> +   * MAC_PPPOE_LCP_PAY packet::
> 
> -     testpmd> flow list 0
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
> -   check the rule not exists in the list.
> +     change the field [Source MAC], send a packet::
> 
> -2. create a rule for RSS type of MAC_IPV6_PFCP_SESSION::
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
> -     testpmd> flow create 0 ingress pattern eth / ipv6 / udp / pfcp / end actions
> rss types pfcp end key_len 0 queues end / end
> -     testpmd> flow list 0
> +     check the hash value is different from the first packet.
> +     change other fields, send packets::
> 
> -   check the rule exists in the list.
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
> -3. send matched packets
> +     check the hash values are the same as the first packet.
> 
> -   * MAC_IPV6_PFCP_SESSION packet::
> +   * MAC_PPPOE_IPCP_PAY packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=8805)
> /PFCP(Sfield=1, SEID=1)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
> -     change the field [SEID], send a packet::
> +     change the field [Source MAC], send a packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=8805)
> /PFCP(Sfield=1, SEID=2)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
>       check the hash value is different from the first packet.
>       change other fields, send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=23,dport=8805)
> /PFCP(Sfield=1, SEID=1)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern::
> -
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ")/UDP(sport=22,dport=8805)/PFCP(Sfield=1,
> SEID=1)/Raw("x"*80)],iface="ens786f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=25)/R
> aw("x"*80)],iface="ens786f0")
> -
> -   check the hash values not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
> @@ -286,12 +240,12 @@ Test case: MAC_IPV6_PFCP_SESSION
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_IPV4_L2TPv3
> -==========================
> +Subcase 2: MAC_PPPOE_PAY_L2_DST_ONLY
> +------------------------------------
> 
> -1. validate a rule for RSS type of MAC_IPV4_L2TPv3::
> +1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions
> rss types l2tpv3 end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -303,36 +257,31 @@ Test case: MAC_IPV4_L2TPv3
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_IPV4_L2TPv3::
> +2. create a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss
> types l2tpv3 end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_IPV4_L2TPv3 packet::
> +   * MAC_PPPOE_PAY packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",
> proto=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [session_id], send a packet::
> +     change the field [Dest MAC], send a packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.4",
> proto=115)/L2TP('\x00\x00\x00\x12')/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash value is different from the first packet.
>       change other fields, send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.5",dst="192.168.0.7",
> proto=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern::
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022",
> nh=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ")/UDP(sport=22,dport=25)/Raw("x"*80)],iface="ens786f0")
> +   check the hash values are the same as the first packet.
> 
> -   check the hash values not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
> @@ -342,12 +291,12 @@ Test case: MAC_IPV4_L2TPv3
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_IPV6_L2TPv3
> -==========================
> +Subcase 3: MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY
> +------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_IPV6_L2TPv3::
> +1. validate a rule for RSS type of
> MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / ipv6 / l2tpv3oip / end actions
> rss types l2tpv3 end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types
> eth end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -359,36 +308,33 @@ Test case: MAC_IPV6_L2TPv3
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_IPV6_L2TPv3::
> +2. create a rule for RSS type of
> MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / ipv6 / l2tpv3oip / end actions rss
> types l2tpv3 end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types
> eth end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_IPV6_L2TPv3 packet::
> +   * MAC_PPPOE_PAY packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022",
> nh=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [session_id], send a packet::
> +     change the fields [Source MAC][Dest MAC], send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022",
> nh=115)/L2TP('\x00\x00\x00\x12')/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> 
> -     check the hash value is different from the first packet.
> +     check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023",
> nh=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern::
> -
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",
> proto=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=25)/R
> aw("x"*80)],iface="ens786f0")
> -
> -   check the hash values not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
> @@ -398,12 +344,12 @@ Test case: MAC_IPV6_L2TPv3
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_IPV4_ESP
> -=======================
> +Subcase 4: MAC_PPPOE_PAY_SESSION_ID
> +-----------------------------------
> 
> -1. validate a rule for RSS type of MAC_IPV4_ESP::
> +1. validate a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::
> 
> -     testpmd> flow validate 0 ingress pattern eth / ipv4 / esp / end actions rss
> types esp end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types
> pppoe end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -415,36 +361,46 @@ Test case: MAC_IPV4_ESP
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_IPV4_ESP::
> +2. create a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::
> 
> -     testpmd> flow create 0 ingress pattern eth / ipv4 / esp / end actions rss types
> esp end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types
> pppoe end key_len 0 queues end / end
>       testpmd> flow list 0
> 
> -   check the rule exists in the list
> +   check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_IPV4_ESP packet::
> +   * MAC_PPPOE_LCP_PAY packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",
> proto=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
> -     change the field [spi], send a packet::
> +     change the field [Session ID], send a packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",
> proto=50)/ESP(spi=12)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
>       check the hash value is different from the first packet.
>       change other fields, send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.4",dst="192.168.0.7",
> proto=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> +
> +     check the hash values are the same as the first packet.
> 
> -   check the hash values are the same as the first packet.
> +   * MAC_PPPOE_IPCP_PAY packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> +
> +     change the field [Session ID], send a packet::
> 
> -4. send packets mismatched the pattern::
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> +
> +     check the hash value is different from the first packet.
> +     change other fields, send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",
> proto=115)/L2TP('\x00\x00\x00\x11')/Raw("x"*480)], iface="ens786f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022",
> nh=50)/ESP(spi=12)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> +
> +     check the hash values are the same as the first packet.
> 
> -   check the hash values not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
> @@ -454,12 +410,12 @@ Test case: MAC_IPV4_ESP
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_IPV4_UDP_ESP
> -===========================
> +Subcase 5: MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID
> +-----------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_IPV4_UDP_ESP::
> +1. validate a rule for RSS type of
> MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::
> 
> -     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / esp / end actions
> rss types esp end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-src-only pppoe end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -471,37 +427,50 @@ Test case: MAC_IPV4_UDP_ESP
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_IPV4_UDP_ESP::
> +2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::
> 
> -     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / esp / end actions rss
> types esp end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-src-only pppoe end key_len 0 queues end / end
>       testpmd> flow list 0
> 
> -   check the rule exists in the list
> +   check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_IPV4_UDP_ESP packet::
> +   * MAC_PPPOE_LCP_PAY packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/
> UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
> -     change the field [spi], send a packet::
> +     change the fields [Source MAC][Session ID], send a packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/
> UDP(dport=4500)/ESP(spi=12)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
> -     check the hash value is different from the first packet.
> +     check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.4",dst="192.168.0.7")/
> UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern::
> +   * MAC_PPPOE_IPCP_PAY packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> +
> +     change the fields [Source MAC][Session ID], send a packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> +
> +     check the hash values are different from the first packet.
> +     change other fields, send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(dport=4500)/ESP(spi=
> 11)/Raw("x"*480)], iface="ens786f0")
> -     sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=2
> 5,dport=23)/Raw("x"*80)],iface="ens786f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",
> proto=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
> +     check the hash values are the same as the first packet.
> 
> -   check the hash values not exist.
> +4. send packets mismatched the rule, check the hash values not exist.
> 
>  5. destroy the rule::
> 
> @@ -511,12 +480,22 @@ Test case: MAC_IPV4_UDP_ESP
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_IPV6_ESP
> -=======================
> +Test case: MAC_PPPOE_IPV4_PAY
> +=============================
> +
> +packets mismatched the pattern::
> +
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ")/Raw("x"*80)],iface="ens786f0")
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ", frag=5)/Raw("x"*80)],iface="ens786f0")
> +
> +Subcase 1: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY
> +-----------------------------------------
> 
> -1. validate a rule for RSS type of MAC_IPV6_ESP::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / ipv6 / esp / end actions rss
> types esp end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth l2-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -528,36 +507,46 @@ Test case: MAC_IPV6_ESP
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_IPV6_ESP::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / ipv6 / esp / end actions rss types
> esp end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth l2-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
> -   check the rule exists in the list
> +   check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_IPV6_ESP packet::
> +   * MAC_PPPOE_IPV4_PAY packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022",
> nh=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [spi], send a packet::
> +     change the field [Source MAC], send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022",
> nh=50)/ESP(spi=12)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
> -     check the hash value is different from the first packet.
> +     check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023",
> nh=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern::
> +   * MAC_PPPOE_IPV4_FRAG packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> +
> +     change the field [Source MAC], send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> +
> +     check the hash values are different from the first packet.
> +     change other fields, send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",
> proto=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
> -     sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +     check the hash values are the same as the first packet.
> 
> -   check the hash values not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
> @@ -567,12 +556,12 @@ Test case: MAC_IPV6_ESP
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_IPV6_UDP_ESP
> -===========================
> +Subcase 2: MAC_PPPOE_IPV4_PAY_L2_DST_ONLY
> +-----------------------------------------
> 
> -1. validate a rule for RSS type of MAC_IPV6_UDP_ESP::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / ipv6 / udp / esp / end actions
> rss types esp end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth l2-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -584,37 +573,46 @@ Test case: MAC_IPV6_UDP_ESP
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_IPV6_UDP_ESP::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / ipv6 / udp / esp / end actions rss
> types esp end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth l2-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
> -   check the rule exists in the list
> +   check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_IPV6_UDP_ESP packet::
> +   * MAC_PPPOE_IPV4_PAY packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(dport=4500)/ESP(spi=
> 11)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [spi], send a packet::
> +     change the field [Dest MAC], send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(dport=4500)/ESP(spi=
> 12)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
> -     check the hash value is different from the first packet.
> +     check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(dport=4500)/ESP(spi=
> 11)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern::
> +   * MAC_PPPOE_IPV4_FRAG packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> +
> +     change the field [Dest MAC], send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> +
> +     check the hash values are different from the first packet.
> +     change other fields, send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/
> UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
> -     sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022",
> nh=50)/ESP(spi=11)/Raw("x"*480)], iface="ens786f0")
> +     check the hash values are the same as the first packet.
> 
> -   check the hash values not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
> @@ -624,12 +622,12 @@ Test case: MAC_IPV6_UDP_ESP
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_IPV4_AH
> -======================
> +Subcase 3: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY
> +-----------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_IPV4_AH::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / ipv4 / ah / end actions rss
> types ah end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -641,999 +639,46 @@ Test case: MAC_IPV4_AH
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_IPV4_AH::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / ipv4 / ah / end actions rss types
> ah end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_IPV4_AH packet::
> +   * MAC_PPPOE_IPV4_PAY packet::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",
> proto=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [spi], send a packet::
> +     change the fields [Source MAC][Dest MAC], send packets::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",
> proto=51)/AH(spi=12)/Raw("x"*480)], iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> -
> -
> sendp([Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.4",dst="192.168.0.8",
> proto=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern::
> -
> -     sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=2
> 5,dport=23)/Raw("x"*80)],iface="ens786f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022",
> nh=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
> -
> -   check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Test case: MAC_IPV6_AH
> -======================
> -
> -1. validate a rule for RSS type of MAC_IPV6_AH::
> -
> -     testpmd> flow validate 0 ingress pattern eth / ipv6 / ah / end actions rss
> types ah end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_IPV6_AH::
> -
> -     testpmd> flow create 0 ingress pattern eth / ipv6 / ah / end actions rss types
> ah end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_IPV6_AH packet::
> -
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022",
> nh=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
> -
> -     change the field [spi], send a packet::
> -
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022",
> nh=51)/AH(spi=12)/Raw("x"*480)], iface="ens786f0")
> -
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> -
> -
> sendp([Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1
> 111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023",
> nh=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern::
> -
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",
> proto=51)/AH(spi=11)/Raw("x"*480)], iface="ens786f0")
> -     sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -
> -   check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Test case: MAC_PPPOE_PAY
> -========================
> -
> -Note: For PPPOE control packets, the hash input set should be
> -src mac address + PPP session id, so only add LCP/IPCP packets to the
> -L2_SRC_ONLY and SESSION_ID subcases in the case.
> -
> -packets mismatched the pattern::
> -
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*80)]
> ,iface="ens786f0")
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -Subcase 1: MAC_PPPOE_PAY_L2_SRC_ONLY
> -------------------------------------
> -
> -1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-src-only end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-src-only end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Source MAC], send a packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_LCP_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     change the field [Source MAC], send a packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPCP_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     change the field [Source MAC], send a packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 2: MAC_PPPOE_PAY_L2_DST_ONLY
> -------------------------------------
> -
> -1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-dst-only end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-dst-only end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Dest MAC], send a packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
> -
> -   check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 3: MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY
> -------------------------------------------------
> -
> -1. validate a rule for RSS type of
> MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types
> eth end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of
> MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types
> eth end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     change the fields [Source MAC][Dest MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 4: MAC_PPPOE_PAY_SESSION_ID
> -===================================
> -
> -1. validate a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types
> pppoe end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types
> pppoe end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_LCP_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     change the field [Session ID], send a packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPCP_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     change the field [Session ID], send a packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 5: MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID
> ------------------------------------------------
> -
> -1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-src-only pppoe end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types
> eth l2-src-only pppoe end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_LCP_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     change the fields [Source MAC][Session ID], send a packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/
> PPP_LCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPCP_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     change the fields [Source MAC][Session ID], send a packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/
> PPP_IPCP()/Raw("x" * 80)],iface="ens786f0",count=1)
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the rule, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Test case: MAC_PPPOE_IPV4_PAY
> -=============================
> -
> -packets mismatched the pattern::
> -
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ")/Raw("x"*80)],iface="ens786f0")
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -Subcase 1: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY
> ------------------------------------------
> -
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth l2-src-only end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth l2-src-only end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_IPV4_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Source MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPV4_FRAG packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Source MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 2: MAC_PPPOE_IPV4_PAY_L2_DST_ONLY
> ------------------------------------------
> -
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth l2-dst-only end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth l2-dst-only end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_IPV4_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Dest MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPV4_FRAG packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Dest MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 3: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY
> ------------------------------------------------------
> -
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types eth end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_IPV4_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     change the fields [Source MAC][Dest MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPV4_FRAG packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     change the fields [Source MAC][Dest MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 4: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY
> ------------------------------------------
> -
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types ipv4 l3-src-only end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types ipv4 l3-src-only end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_IPV4_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Source IP], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:54",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPV4_FRAG packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Source IP], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:54",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.7", frag=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 5: MAC_PPPOE_IPV4_PAY_L3_DST_ONLY
> ------------------------------------------
> -
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types ipv4 l3-dst-only end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types ipv4 l3-dst-only end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_IPV4_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Dest IP], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.3")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.7", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPV4_FRAG packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Dest IP], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.3", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.7", dst="192.168.1.2", frag=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 6: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY
> ------------------------------------------------------
> -
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types ipv4 end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types ipv4 end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_IPV4_PAY packet::
> -
> -
> sendp([Ether(src="00:11:22:33:44:55",dst="10:22:33:44:55:66")/PPPoE(sessionid
> =3)/PPP(proto=0x0021)/IP(src="192.168.1.1",
> dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     change the fields [Source IP][Dest IP], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -
> sendp([Ether(src="00:11:22:33:44:53",dst="10:22:33:44:55:99")/PPPoE(sessionid
> =7)/PPP(proto=0x0021)/IP(src="192.168.1.1",
> dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPV4_FRAG packet::
> -
> -
> sendp([Ether(src="00:11:22:33:44:55",dst="10:22:33:44:55:66")/PPPoE(sessionid
> =3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2",
> frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     change the fields [Source IP][Dest IP], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.7", frag=5)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.7", frag=5)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -
> sendp([Ether(src="00:11:22:33:44:53",dst="10:22:33:44:55:99")/PPPoE(sessionid
> =7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2",
> frag=3)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Test case: MAC_PPPOE_IPV4_UDP_PAY
> -=================================
> -
> -packets mismatched the pattern::
> -
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -
> -Subcase 1: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY
> ----------------------------------------------
> -
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_IPV4_UDP_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Source MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 2: MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY
> ----------------------------------------------
> -
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_IPV4_UDP_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -
> -     change the field [Dest MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 3: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
> ----------------------------------------------------------
> -
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types eth end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types eth end key_len 0 queues end / end
> -     testpmd> flow list 0
> +     check the hash values are different from the first packet.
> +     change other fields, send packets::
> 
> -   check the rule exists in the list.
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5")/Raw("x"*80)],iface="ens786f0")
> 
> -3. send matched packets
> +     check the hash values are the same as the first packet.
> 
> -   * MAC_PPPOE_IPV4_UDP_PAY packet::
> +   * MAC_PPPOE_IPV4_FRAG packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> 
>       change the fields [Source MAC][Dest MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -1647,12 +692,12 @@ Subcase 3:
> MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 4: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY
> ----------------------------------------------
> +Subcase 4: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY
> +-----------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types ipv4 l3-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -1664,27 +709,42 @@ Subcase 4:
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types ipv4 l3-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV4_UDP_PAY packet::
> +   * MAC_PPPOE_IPV4_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
>       change the field [Source IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:54",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
> +
> +     check the hash values are the same as the first packet.
> +
> +   * MAC_PPPOE_IPV4_FRAG packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> +
> +     change the field [Source IP], send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> +
> +     check the hash values are different from the first packet.
> +     change other fields, send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:54",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.7", frag=3)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -1698,12 +758,12 @@ Subcase 4:
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 5: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY
> ----------------------------------------------
> +Subcase 5: MAC_PPPOE_IPV4_PAY_L3_DST_ONLY
> +-----------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types ipv4 l3-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -1715,78 +775,42 @@ Subcase 5:
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types ipv4 l3-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV4_UDP_PAY packet::
> +   * MAC_PPPOE_IPV4_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
>       change the field [Dest IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.3")/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.7", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 6: MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY
> ----------------------------------------------
> -
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_IPV4_UDP_PAY packet::
> +   * MAC_PPPOE_IPV4_FRAG packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Source Port], send packets::
> +     change the field [Dest IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.3", frag=5)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.7", dst="192.168.1.2", frag=3)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -1800,12 +824,12 @@ Subcase 6:
> MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 7: MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY
> ----------------------------------------------
> +Subcase 6: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY
> +-----------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types ipv4 end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -1817,80 +841,46 @@ Subcase 7:
> MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l4-dst-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> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV4_UDP_PAY packet::
> +   * MAC_PPPOE_IPV4_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +
> sendp([Ether(src="00:11:22:33:44:55",dst="10:22:33:44:55:66")/PPPoE(sessionid
> =3)/PPP(proto=0x0021)/IP(src="192.168.1.1",
> dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Dest Port], send packets::
> +     change the fields [Source IP][Dest IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.7")/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +
> sendp([Ether(src="00:11:22:33:44:53",dst="10:22:33:44:55:99")/PPPoE(sessionid
> =7)/PPP(proto=0x0021)/IP(src="192.168.1.1",
> dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern, check the hash values not exist.
> -
> -5. destroy the rule::
> -
> -     testpmd> flow destroy 0 rule 0
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -   send the matched packets, check the hash values of the packets are not exist.
> -
> -Subcase 8: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
> ----------------------------------------------------------
> -
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end
> -
> -   get the message::
> -
> -     Flow rule validated
> -
> -   check the flow list::
> -
> -     testpmd> flow list 0
> -
> -   check the rule not exists in the list.
> -
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_IPV4_UDP_PAY packet::
> +   * MAC_PPPOE_IPV4_FRAG packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +
> sendp([Ether(src="00:11:22:33:44:55",dst="10:22:33:44:55:66")/PPPoE(sessionid
> =3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2",
> frag=5)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Source Port], send packets::
> +     change the fields [Source IP][Dest IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.7", frag=5)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3", dst="192.168.1.7", frag=5)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.9")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +
> sendp([Ether(src="00:11:22:33:44:53",dst="10:22:33:44:55:99")/PPPoE(sessionid
> =7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2",
> frag=3)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -1904,12 +894,21 @@ Subcase 8:
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> ----------------------------------------------------------
> +Test case: MAC_PPPOE_IPV4_UDP_PAY
> +=================================
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> +packets mismatched the pattern::
> 
> -     testpmd> flow validate 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
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +
> +Subcase 1: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY
> +---------------------------------------------
> +
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::
> +
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -1921,9 +920,9 @@ Subcase 9:
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::
> 
> -     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> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -1934,16 +933,14 @@ Subcase 9:
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Dest Port], send packets::
> +     change the field [Source MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -1957,12 +954,12 @@ Subcase 9:
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> -----------------------------------------------------------
> +Subcase 2: MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -1974,9 +971,9 @@ Subcase 10:
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -1987,16 +984,14 @@ Subcase 10:
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Dest IP][Source Port], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +     change the field [Dest MAC], send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2010,12 +1005,12 @@ Subcase 10:
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
> -----------------------------------------------------------
> +Subcase 3: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
> +---------------------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types eth end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2027,9 +1022,9 @@ Subcase 11:
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / 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 / pppoes / ipv4 / udp / end
> actions rss types eth end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -2040,18 +1035,18 @@ Subcase 11:
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Dest IP][Dest Port], send packets::
> +     change the fields [Source MAC][Dest MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.3")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.3")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
> -   check the hash values are the same as the first packet.
> +     check the hash values are the same as the first packet.
> 
>  4. send packets mismatched the pattern, check the hash values not exist.
> 
> @@ -2063,12 +1058,12 @@ Subcase 11:
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 12:
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ONLY
> -----------------------------------------------------------------------------------
> +Subcase 4: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2080,9 +1075,9 @@ Subcase 12:
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -2093,18 +1088,14 @@ Subcase 12:
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
> +     change the field [Source IP], send packets::
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2118,12 +1109,12 @@ Subcase 12:
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4
> ----------------------------------------
> +Subcase 5: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4 end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2135,9 +1126,9 @@ Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4 end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -2148,16 +1139,14 @@ Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Dest IP], send packets::
> +     change the field [Dest IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2171,21 +1160,12 @@ Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_PPPOE_IPV4_TCP_PAY
> -=================================
> -
> -packets mismatched the pattern::
> -
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -
> -Subcase 1: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY
> +Subcase 6: MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY
>  ---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2197,27 +1177,27 @@ Subcase 1:
> MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types eth l2-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV4_TCP_PAY packet::
> +   * MAC_PPPOE_IPV4_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Source MAC], send packets::
> +     change the field [Source Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2231,12 +1211,12 @@ Subcase 1:
> MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 2: MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY
> +Subcase 7: MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY
>  ---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2248,27 +1228,27 @@ Subcase 2:
> MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types eth l2-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV4_TCP_PAY packet::
> +   * MAC_PPPOE_IPV4_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Dest MAC], send packets::
> +     change the field [Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2282,12 +1262,12 @@ Subcase 2:
> MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 3: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
> +Subcase 8: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
>  ---------------------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types eth end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2299,29 +1279,29 @@ Subcase 3:
> MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types eth end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV4_TCP_PAY packet::
> +   * MAC_PPPOE_IPV4_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source MAC][Dest MAC], send packets::
> +     change the fields [Source IP][Source Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.9")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2335,12 +1315,12 @@ Subcase 3:
> MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 4: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY
> ----------------------------------------------
> +Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> +---------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 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
> 
>     get the message::
> 
> @@ -2352,27 +1332,29 @@ Subcase 4:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types ipv4-tcp l3-src-only end key_len 0 queues end / end
> +     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> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV4_TCP_PAY packet::
> +   * MAC_PPPOE_IPV4_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Source IP], send packets::
> +     change the fields [Source IP][Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2386,12 +1368,12 @@ Subcase 4:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 5: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY
> ----------------------------------------------
> +Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> +----------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2403,27 +1385,29 @@ Subcase 5:
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV4_TCP_PAY packet::
> +   * MAC_PPPOE_IPV4_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Dest IP], send packets::
> +     change the fields [Dest IP][Source Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.3")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2437,12 +1421,12 @@ Subcase 5:
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 6: MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY
> ----------------------------------------------
> +Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
> +----------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l4-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2454,29 +1438,31 @@ Subcase 6:
> MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types ipv4-tcp l4-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV4_TCP_PAY packet::
> +   * MAC_PPPOE_IPV4_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Source Port], send packets::
> +     change the fields [Dest IP][Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.3")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.3")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     check the hash values are the same as the first packet.
> +   check the hash values are the same as the first packet.
> 
>  4. send packets mismatched the pattern, check the hash values not exist.
> 
> @@ -2488,12 +1474,12 @@ Subcase 6:
> MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 7: MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY
> ----------------------------------------------
> +Subcase 12:
> MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ONLY
> +----------------------------------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2505,27 +1491,31 @@ Subcase 7:
> MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types ipv4-tcp l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-udp end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV4_TCP_PAY packet::
> +   * MAC_PPPOE_IPV4_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Dest Port], send packets::
> +     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=19)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2539,12 +1529,12 @@ Subcase 7:
> MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 8: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
> ----------------------------------------------------------
> +Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4
> +---------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4 end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2556,29 +1546,29 @@ Subcase 8:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4 end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV4_TCP_PAY packet::
> +   * MAC_PPPOE_IPV4_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Source Port], send packets::
> +     change the fields [Source IP][Dest IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.9")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2592,12 +1582,21 @@ Subcase 8:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> ----------------------------------------------------------
> +Test case: MAC_PPPOE_IPV4_TCP_PAY
> +=================================
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> +packets mismatched the pattern::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21
> ")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +
> +Subcase 1: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY
> +---------------------------------------------
> +
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::
> +
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2609,9 +1608,9 @@ Subcase 9:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -2622,16 +1621,14 @@ Subcase 9:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Dest Port], send packets::
> +     change the field [Source MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2645,12 +1642,12 @@ Subcase 9:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> -----------------------------------------------------------
> +Subcase 2: MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2662,9 +1659,9 @@ Subcase 10:
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -2675,16 +1672,14 @@ Subcase 10:
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Dest IP][Source Port], send packets::
> +     change the field [Dest MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2698,12 +1693,12 @@ Subcase 10:
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
> -----------------------------------------------------------
> +Subcase 3: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
> +---------------------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types eth end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2715,9 +1710,9 @@ Subcase 11:
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types ipv4-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types eth end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -2728,16 +1723,16 @@ Subcase 11:
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Dest IP][Dest Port], send packets::
> +     change the fields [Source MAC][Dest MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=90)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=25,dport=90)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2751,12 +1746,12 @@ Subcase 11:
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 12:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ONLY
> -----------------------------------------------------------------------------------
> +Subcase 4: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2768,9 +1763,9 @@ Subcase 12:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions
> rss types ipv4-tcp end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -2781,18 +1776,14 @@ Subcase 12:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
> +     change the field [Source IP], send packets::
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.5")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2806,22 +1797,12 @@ Subcase 12:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_PPPOE_IPV6_PAY
> -=============================
> -
> -packets mismatched the pattern::
> -
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> -
> -Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY
> ------------------------------------------
> +Subcase 5: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth l2-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2833,42 +1814,27 @@ Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth l2-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     change the field [Source MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPV6_FRAG packet::
> +   * MAC_PPPOE_IPV4_TCP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Source MAC], send packets::
> +     change the fields [Dest IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.3")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     check the hash value is different from the first packet.
> +     check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2882,12 +1848,12 @@ Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY
> ------------------------------------------
> +Subcase 6: MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth l2-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2899,42 +1865,27 @@ Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth l2-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l4-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     change the field [Dest MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPV6_FRAG packet::
> +   * MAC_PPPOE_IPV4_TCP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Dest MAC], send packets::
> +     change the field [Source Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     check the hash value is different from the first packet.
> +     check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -2948,12 +1899,12 @@ Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 3: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY
> ------------------------------------------------------
> +Subcase 7: MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l4-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -2965,46 +1916,27 @@ Subcase 3:
> MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l4-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     change the field [Source MAC][Dest MAC], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPV6_FRAG packet::
> +   * MAC_PPPOE_IPV4_TCP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Source MAC][Dest MAC], send packets::
> +     change the field [Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=19)/Raw("x"*80)],iface="ens786f0")
> 
> -     check the hash value is different from the first packet.
> +     check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.7")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3018,12 +1950,12 @@ Subcase 3:
> MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY
> ------------------------------------------
> +Subcase 8: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
> +---------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 l3-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3035,42 +1967,29 @@ Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 l3-src-only end key_len 0 queues end / end
> -     testpmd> flow list 0
> -
> -   check the rule exists in the list.
> -
> -3. send matched packets
> -
> -   * MAC_PPPOE_IPV6_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     change the field [Source IP], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> 
> -     check the hash value is different from the first packet.
> -     change other fields, send packets::
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow list 0
> 
> -       sendp([Ether(src="00:11:22:33:44:54",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens78
> 6f0")
> +   check the rule exists in the list.
> 
> -     check the hash values are the same as the first packet.
> +3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_FRAG packet::
> +   * MAC_PPPOE_IPV4_TCP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Source IP], send packets::
> +     change the fields [Source IP][Source Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     check the hash value is different from the first packet.
> +     check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:54",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.9")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3084,12 +2003,12 @@ Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY
> ------------------------------------------
> +Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> +---------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 l3-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3101,42 +2020,29 @@ Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 l3-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     change the field [Dest IP], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPV6_FRAG packet::
> +   * MAC_PPPOE_IPV4_TCP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Dest IP], send packets::
> +     change the fields [Source IP][Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3150,12 +2056,12 @@ Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 6: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY
> ------------------------------------------------------
> +Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> +----------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3167,46 +2073,29 @@ Subcase 6:
> MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_PAY packet::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     change the fields [Source IP][Dest IP], send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/Raw("x"*80)],iface="ens78
> 6f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     check the hash values are different from the first packet.
> -     change other fields, send packets::
> -
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> -
> -     check the hash values are the same as the first packet.
> -
> -   * MAC_PPPOE_IPV6_FRAG packet::
> +   * MAC_PPPOE_IPV4_TCP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Dest IP], send packets::
> +     change the fields [Dest IP][Source Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=9,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3220,21 +2109,12 @@ Subcase 6:
> MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_PPPOE_IPV6_UDP_PAY
> -=================================
> -
> -packets mismatched the pattern::
> -
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -
> -Subcase 1: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY
> ----------------------------------------------
> +Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
> +----------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3246,27 +2126,29 @@ Subcase 1:
> MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_UDP_PAY packet::
> +   * MAC_PPPOE_IPV4_TCP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Source MAC], send packets::
> +     change the fields [Dest IP][Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=90)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.7")/TCP(sport=25,dport=90)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3280,12 +2162,12 @@ Subcase 1:
> MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 2: MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY
> ----------------------------------------------
> +Subcase 12:
> MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ONLY
> +----------------------------------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3297,27 +2179,31 @@ Subcase 2:
> MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end
> actions rss types ipv4-tcp end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_UDP_PAY packet::
> +   * MAC_PPPOE_IPV4_TCP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
> -     change the field [Dest MAC], send packets::
> +     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.5")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.3",
> dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3331,12 +2217,22 @@ Subcase 2:
> MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 3: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
> ----------------------------------------------------------
> +Test case: MAC_PPPOE_IPV6_PAY
> +=============================
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> +packets mismatched the pattern::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth end key_len 0 queues end / end
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2")/Raw("x"*80)],iface="ens786f0")
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)],iface="ens786f0")
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY
> +-----------------------------------------
> +
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::
> +
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth l2-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3348,29 +2244,42 @@ Subcase 3:
> MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth l2-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_UDP_PAY packet::
> +   * MAC_PPPOE_IPV6_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> 
> -     change the fields [Source MAC][Dest MAC], send packets::
> +     change the field [Source MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> 
> -     check the hash values are different from the first packet.
> +     check the hash value is different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens78
> 6f0")
> +
> +     check the hash values are the same as the first packet.
> +
> +   * MAC_PPPOE_IPV6_FRAG packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     change the field [Source MAC], send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     check the hash value is different from the first packet.
> +     change other fields, send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3384,12 +2293,12 @@ Subcase 3:
> MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 4: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY
> ----------------------------------------------
> +Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY
> +-----------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth l2-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3401,27 +2310,42 @@ Subcase 4:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth l2-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_UDP_PAY packet::
> +   * MAC_PPPOE_IPV6_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> 
> -     change the field [Source IP], send packets::
> +     change the field [Dest MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> 
> -     check the hash values are different from the first packet.
> +     check the hash value is different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens78
> 6f0")
> +
> +     check the hash values are the same as the first packet.
> +
> +   * MAC_PPPOE_IPV6_FRAG packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     change the field [Dest MAC], send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     check the hash value is different from the first packet.
> +     change other fields, send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3435,12 +2359,12 @@ Subcase 4:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 5: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY
> ----------------------------------------------
> -
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::
> +Subcase 3: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY
> +-----------------------------------------------------
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> +
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3452,27 +2376,46 @@ Subcase 5:
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types eth end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_UDP_PAY packet::
> +   * MAC_PPPOE_IPV6_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> 
> -     change the field [Dest IP], send packets::
> +     change the field [Source MAC][Dest MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> 
> -     check the hash values are different from the first packet.
> +     check the hash value is different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens78
> 6f0")
> +
> +     check the hash values are the same as the first packet.
> +
> +   * MAC_PPPOE_IPV6_FRAG packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     change the field [Source MAC][Dest MAC], send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     check the hash value is different from the first packet.
> +     change other fields, send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3486,12 +2429,12 @@ Subcase 5:
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 6: MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
> ----------------------------------------------
> +Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY
> +-----------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 l3-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3503,27 +2446,42 @@ Subcase 6:
> MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 l3-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_UDP_PAY packet::
> +   * MAC_PPPOE_IPV6_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> 
> -     change the field [Source Port], send packets::
> +     change the field [Source IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> 
> -     check the hash values are different from the first packet.
> +     check the hash value is different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:54",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens78
> 6f0")
> +
> +     check the hash values are the same as the first packet.
> +
> +   * MAC_PPPOE_IPV6_FRAG packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     change the field [Source IP], send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     check the hash value is different from the first packet.
> +     change other fields, send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:54",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3537,12 +2495,12 @@ Subcase 6:
> MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 7: MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY
> ----------------------------------------------
> +Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY
> +-----------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 l3-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3554,27 +2512,42 @@ Subcase 7:
> MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 l3-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_UDP_PAY packet::
> +   * MAC_PPPOE_IPV6_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> 
> -     change the field [Dest Port], send packets::
> +     change the field [Dest IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)],iface="ens78
> 6f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> +
> +     check the hash values are the same as the first packet.
> +
> +   * MAC_PPPOE_IPV6_FRAG packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     change the field [Dest IP], send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     check the hash values are different from the first packet.
> +     change other fields, send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3588,12 +2561,12 @@ Subcase 7:
> MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 8: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
> ----------------------------------------------------------
> +Subcase 6: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY
> +-----------------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3605,29 +2578,46 @@ Subcase 8:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss
> types ipv6 end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_UDP_PAY packet::
> +   * MAC_PPPOE_IPV6_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> 
> -     change the fields [Source IP][Source Port], send packets::
> +     change the fields [Source IP][Dest IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/Raw("x"*80)],iface="ens78
> 6f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/Raw("x"*80)],iface="ens78
> 6f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)],iface="ens78
> 6f0")
> +
> +     check the hash values are the same as the first packet.
> +
> +   * MAC_PPPOE_IPV6_FRAG packet::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     change the fields [Source IP][Dest IP], send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> +
> +     check the hash values are different from the first packet.
> +     change other fields, send packets::
> +
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw
> ("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3641,12 +2631,21 @@ Subcase 8:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> ----------------------------------------------------------
> +Test case: MAC_PPPOE_IPV6_UDP_PAY
> +=================================
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> +packets mismatched the pattern::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +
> +Subcase 1: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY
> +---------------------------------------------
> +
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::
> +
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3658,9 +2657,9 @@ Subcase 9:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -3671,18 +2670,16 @@ Subcase 9:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Dest Port], send packets::
> +     change the field [Source MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
> -   check the hash values are the same as the first packet.
> +     check the hash values are the same as the first packet.
> 
>  4. send packets mismatched the pattern, check the hash values not exist.
> 
> @@ -3694,12 +2691,12 @@ Subcase 9:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> -----------------------------------------------------------
> +Subcase 2: MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3711,9 +2708,9 @@ Subcase 10:
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -3724,18 +2721,16 @@ Subcase 10:
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Dest IP][Source Port], send packets::
> +     change the field [Dest MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
> -   check the hash values are the same as the first packet.
> +     check the hash values are the same as the first packet.
> 
>  4. send packets mismatched the pattern, check the hash values not exist.
> 
> @@ -3747,12 +2742,12 @@ Subcase 10:
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
> -----------------------------------------------------------
> +Subcase 3: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY
> +---------------------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3764,9 +2759,9 @@ Subcase 11:
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types eth end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -3777,16 +2772,16 @@ Subcase 11:
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Dest IP][Dest Port], send packets::
> +     change the fields [Source MAC][Dest MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3800,12 +2795,12 @@ Subcase 11:
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 12:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ONLY
> -----------------------------------------------------------------------------------
> +Subcase 4: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3817,9 +2812,9 @@ Subcase 12:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -3830,18 +2825,14 @@ Subcase 12:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
> +     change the field [Source IP], send packets::
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3855,21 +2846,12 @@ Subcase 12:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_PPPOE_IPV6_TCP_PAY
> -=================================
> -
> -packets mismatched the pattern::
> -
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> -  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -
> -Subcase 1: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY
> +Subcase 5: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY
>  ---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3881,27 +2863,27 @@ Subcase 1:
> MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types eth l2-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_TCP_PAY packet::
> +   * MAC_PPPOE_IPV6_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the field [Source MAC], send packets::
> +     change the field [Dest IP], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3915,12 +2897,12 @@ Subcase 1:
> MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 2: MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY
> +Subcase 6: MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
>  ---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3932,27 +2914,27 @@ Subcase 2:
> MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types eth l2-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_TCP_PAY packet::
> +   * MAC_PPPOE_IPV6_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the field [Dest MAC], send packets::
> +     change the field [Source Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -3966,12 +2948,12 @@ Subcase 2:
> MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 3: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
> ----------------------------------------------------------
> +Subcase 7: MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types eth end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -3983,29 +2965,27 @@ Subcase 3:
> MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types eth end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_TCP_PAY packet::
> +   * MAC_PPPOE_IPV6_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source MAC][Dest MAC], send packets::
> +     change the field [Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -4019,12 +2999,12 @@ Subcase 3:
> MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 4: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY
> ----------------------------------------------
> +Subcase 8: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
> +---------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4036,27 +3016,29 @@ Subcase 4:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types ipv6-tcp l3-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_TCP_PAY packet::
> +   * MAC_PPPOE_IPV6_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the field [Source IP], send packets::
> +     change the fields [Source IP][Source Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -4070,12 +3052,12 @@ Subcase 4:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 5: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY
> ----------------------------------------------
> +Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> +---------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4087,29 +3069,31 @@ Subcase 5:
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types ipv6-tcp l3-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_TCP_PAY packet::
> +   * MAC_PPPOE_IPV6_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the field [Dest IP], send packets::
> +     change the fields [Source IP][Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     check the hash values are the same as the first packet.
> +   check the hash values are the same as the first packet.
> 
>  4. send packets mismatched the pattern, check the hash values not exist.
> 
> @@ -4121,12 +3105,12 @@ Subcase 5:
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 6: MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY
> ----------------------------------------------
> +Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> +----------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l4-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4138,29 +3122,31 @@ Subcase 6:
> MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types ipv6-tcp l4-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_TCP_PAY packet::
> +   * MAC_PPPOE_IPV6_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the field [Source Port], send packets::
> +     change the fields [Dest IP][Source Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     check the hash values are the same as the first packet.
> +   check the hash values are the same as the first packet.
> 
>  4. send packets mismatched the pattern, check the hash values not exist.
> 
> @@ -4172,12 +3158,12 @@ Subcase 6:
> MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 7: MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY
> ----------------------------------------------
> +Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY
> +----------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4189,27 +3175,29 @@ Subcase 7:
> MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types ipv6-tcp l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_TCP_PAY packet::
> +   * MAC_PPPOE_IPV6_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the field [Dest Port], send packets::
> +     change the fields [Dest IP][Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -4223,12 +3211,12 @@ Subcase 7:
> MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 8: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
> ----------------------------------------------------------
> +Subcase 12:
> MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ONLY
> +----------------------------------------------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-src-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4240,29 +3228,31 @@ Subcase 8:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types ipv6-tcp l3-src-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end
> actions rss types ipv6-udp end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_PPPOE_IPV6_TCP_PAY packet::
> +   * MAC_PPPOE_IPV6_UDP_PAY packet::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Source Port], send packets::
> +     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=19,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=19,dport=99)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -4276,12 +3266,21 @@ Subcase 8:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> ----------------------------------------------------------
> +Test case: MAC_PPPOE_IPV6_TCP_PAY
> +=================================
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> +packets mismatched the pattern::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x"*80)],iface="ens786f0")
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.1
> 68.1.1",
> dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)],iface="ens786f0")
> +  sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:153
> 6",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +
> +Subcase 1: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY
> +---------------------------------------------
> +
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::
> +
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4293,9 +3292,9 @@ Subcase 9:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types ipv6-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types eth l2-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -4306,16 +3305,14 @@ Subcase 9:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Dest Port], send packets::
> +     change the field [Source MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -4329,12 +3326,12 @@ Subcase 9:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> -----------------------------------------------------------
> +Subcase 2: MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4346,9 +3343,9 @@ Subcase 10:
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types ipv6-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types eth l2-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -4359,16 +3356,14 @@ Subcase 10:
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the fields [Dest IP][Source Port], send packets::
> +     change the field [Dest MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -4382,12 +3377,12 @@ Subcase 10:
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
> -----------------------------------------------------------
> +Subcase 3: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY
> +---------------------------------------------------------
> 
> -1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types eth end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4399,9 +3394,9 @@ Subcase 11:
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types ipv6-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types eth end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -4412,16 +3407,16 @@ Subcase 11:
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the fields [Dest IP][Dest Port], send packets::
> +     change the fields [Source MAC][Dest MAC], send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -4435,12 +3430,12 @@ Subcase 11:
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Subcase 12:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ONLY
> -----------------------------------------------------------------------------------
> +Subcase 4: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4452,9 +3447,9 @@ Subcase 12:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions
> rss types ipv6-tcp end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> @@ -4465,18 +3460,14 @@ Subcase 12:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
> +     change the field [Source IP], send packets::
> 
>         sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> -       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> @@ -4490,12 +3481,12 @@ Subcase 12:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ON
>     check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_VLAN_IPV4_PAY
> -============================
> +Subcase 5: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_VLAN_IPV4_PAY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / end actions rss
> types c-vlan end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4507,50 +3498,46 @@ Test case: MAC_VLAN_IPV4_PAY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_VLAN_IPV4_PAY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / end actions rss
> types c-vlan end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_VLAN_IPV4_PAY packet::
> +   * MAC_PPPOE_IPV6_TCP_PAY packet::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/Raw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the field [VLAN ID], send packets::
> +     change the field [Dest IP], send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/Raw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     check the hash value is different from the first packet.
> +     check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:99",
> dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.3", dst="192.168.1.4")/Raw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern::
> -
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x" *
> 80)],iface="ens786f0",count=1)
> -
> -  check the hash values not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
>       testpmd> flow destroy 0 rule 0
>       testpmd> flow list 0
> 
> -   check the rule not exists.
> +   check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_VLAN_IPV4_UDP_PAY
> -================================
> +Subcase 6: MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_VLAN_IPV4_UDP_PAY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / udp / end actions
> rss types c-vlan end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4562,51 +3549,46 @@ Test case: MAC_VLAN_IPV4_UDP_PAY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_VLAN_IPV4_UDP_PAY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / udp / end actions
> rss types c-vlan end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l4-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_VLAN_IPV4_UDP_PAY packet::
> +   * MAC_PPPOE_IPV6_TCP_PAY packet::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the field [VLAN ID], send packets::
> +     change the field [Source Port], send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:99",
> dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.3", dst="192.168.1.4")/UDP(sport=19,dport=99)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> -
> -     check the hash values are the same as as the first packet.
> -
> -4. send packets mismatched the pattern::
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x" * 80)],iface="ens786f0",count=1)
> +     check the hash values are the same as the first packet.
> 
> -   check the hash values of the packets not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
>       testpmd> flow destroy 0 rule 0
>       testpmd> flow list 0
> 
> -   check the rule not exists.
> +   check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_VLAN_IPV4_TCP_PAY
> -================================
> +Subcase 7: MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY
> +---------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_VLAN_IPV4_TCP_PAY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / tcp / end actions
> rss types c-vlan end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l4-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4618,51 +3600,46 @@ Test case: MAC_VLAN_IPV4_TCP_PAY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_VLAN_IPV4_TCP_PAY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / tcp / end actions rss
> types c-vlan end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l4-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_VLAN_IPV4_TCP_PAY packet::
> +   * MAC_PPPOE_IPV6_TCP_PAY packet::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the field [VLAN ID], send packets::
> +     change the field [Dest Port], send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:99",
> dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.3", dst="192.168.1.4")/TCP(sport=19,dport=99)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> -
> -     check the hash values are the same as as the first packet.
> -
> -4. send packets mismatched the pattern::
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x" * 80)],iface="ens786f0",count=1)
> +     check the hash values are the same as the first packet.
> 
> -   check the hash values of the packets not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
>       testpmd> flow destroy 0 rule 0
>       testpmd> flow list 0
> 
> -   check the rule not exists.
> +   check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_VLAN_IPV4_SCTP_PAY
> -=================================
> +Subcase 8: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY
> +---------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_VLAN_IPV4_SCTP_PAY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / sctp / end actions
> rss types c-vlan end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-src-only l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4674,51 +3651,48 @@ Test case: MAC_VLAN_IPV4_SCTP_PAY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_VLAN_IPV4_SCTP_PAY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / sctp / end actions
> rss types c-vlan end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-src-only l4-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_VLAN_IPV4_SCTP_PAY packet::
> +   * MAC_PPPOE_IPV6_TCP_PAY packet::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/SCTP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the field [VLAN ID], send packets::
> +     change the fields [Source IP][Source Port], send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/SCTP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:99",
> dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.3", dst="192.168.1.5")/SCTP(sport=19,dport=99)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> -
> -     check the hash values are the same as as the first packet.
> -
> -4. send packets mismatched the pattern::
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/SCTP(sport=25,dport=23)/R
> aw("x" * 80)],iface="ens786f0",count=1)
> +     check the hash values are the same as the first packet.
> 
> -   check the hash values of the packets not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
>       testpmd> flow destroy 0 rule 0
>       testpmd> flow list 0
> 
> -   check the rule not exists.
> +   check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_VLAN_IPV6_PAY
> -============================
> +Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY
> +---------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_VLAN_IPV6_PAY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / end actions rss
> types c-vlan end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4730,50 +3704,48 @@ Test case: MAC_VLAN_IPV6_PAY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_VLAN_IPV6_PAY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / end actions rss
> types c-vlan end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-src-only l4-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_VLAN_IPV6_PAY packet::
> +   * MAC_PPPOE_IPV6_TCP_PAY packet::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x" *
> 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the field [VLAN ID], send packets::
> +     change the fields [Source IP][Dest Port], send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x" *
> 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:99",
> dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("y" *
> 80)],iface="ens786f0",count=1)
> -
> -   check the hash values are the same as the first packet.
> -
> -4. send packets mismatched the pattern::
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/Raw("x" * 80)],iface="ens786f0",count=1)
> +     check the hash values are the same as the first packet.
> 
> -  check the hash values not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
>       testpmd> flow destroy 0 rule 0
>       testpmd> flow list 0
> 
> -   check the rule not exists.
> +   check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_VLAN_IPV6_UDP_PAY
> -================================
> +Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY
> +----------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_VLAN_IPV6_UDP_PAY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / udp / end actions
> rss types c-vlan end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4785,51 +3757,48 @@ Test case: MAC_VLAN_IPV6_UDP_PAY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_VLAN_IPV6_UDP_PAY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / udp / end actions
> rss types c-vlan end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-dst-only l4-src-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_VLAN_IPV6_UDP_PAY packet::
> +   * MAC_PPPOE_IPV6_TCP_PAY packet::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the field [VLAN ID], send packets::
> +     change the fields [Dest IP][Source Port], send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:99",
> dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=23,dport=99)/R
> aw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern::
> -
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x" * 80)],iface="ens786f0",count=1)
> -
> -  check the hash values not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
>       testpmd> flow destroy 0 rule 0
>       testpmd> flow list 0
> 
> -   check the rule not exists.
> +   check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_VLAN_IPV6_TCP_PAY
> -================================
> +Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY
> +----------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_VLAN_IPV6_TCP_PAY::
> +1. validate a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / tcp / end actions
> rss types c-vlan end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4841,51 +3810,48 @@ Test case: MAC_VLAN_IPV6_TCP_PAY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_VLAN_IPV6_TCP_PAY::
> +2. create a rule for RSS type of
> MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::
> 
> -     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / tcp / end actions rss
> types c-vlan end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_VLAN_IPV6_TCP_PAY packet::
> +   * MAC_PPPOE_IPV6_TCP_PAY packet::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the field [VLAN ID], send packets::
> +     change the fields [Dest IP][Dest Port], send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:99",
> dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/TCP(sport=19,dport=99)/Ra
> w("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern::
> -
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x" * 80)],iface="ens786f0",count=1)
> -
> -  check the hash values not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
>       testpmd> flow destroy 0 rule 0
>       testpmd> flow list 0
> 
> -   check the rule not exists.
> +   check the rule not exists in the list.
>     send the matched packets, check the hash values of the packets are not exist.
> 
> -Test case: MAC_VLAN_IPV6_SCTP_PAY
> -=================================
> +Subcase 12:
> MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_
> DST_ONLY
> +----------------------------------------------------------------------------------
> 
> -1. validate a rule for RSS type of MAC_VLAN_IPV6_SCTP_PAY::
> +1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::
> 
> -     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / sctp / end actions
> rss types c-vlan end key_len 0 queues end / end
> +     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp end key_len 0 queues end / end
> 
>     get the message::
> 
> @@ -4897,44 +3863,43 @@ Test case: MAC_VLAN_IPV6_SCTP_PAY
> 
>     check the rule not exists in the list.
> 
> -2. create a rule for RSS type of MAC_VLAN_IPV6_SCTP_PAY::
> +2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::
> 
> -     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / sctp / end actions
> rss types c-vlan end key_len 0 queues end / end
> +     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end
> actions rss types ipv6-tcp end key_len 0 queues end / end
>       testpmd> flow list 0
> 
>     check the rule exists in the list.
> 
>  3. send matched packets
> 
> -   * MAC_VLAN_IPV6_SCTP_PAY packet::
> +   * MAC_PPPOE_IPV6_TCP_PAY packet::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/SCTP(sport=25,dport=23)/R
> aw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
> -     change the field [VLAN ID], send packets::
> +     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=2,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/SCTP(sport=25,dport=23)/R
> aw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=19,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> +       sendp([Ether(src="00:11:22:33:44:55",
> dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/TCP(sport=19,dport=99)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are different from the first packet.
>       change other fields, send packets::
> 
> -       sendp([Ether(src="10:22:33:44:55:99",
> dst="00:11:22:33:44:53",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1537",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/SCTP(sport=25,dport=99)/R
> aw("x" * 80)],iface="ens786f0",count=1)
> +       sendp([Ether(src="00:11:22:33:44:53",
> dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDC
> D:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Ra
> w("x"*80)],iface="ens786f0")
> 
>       check the hash values are the same as the first packet.
> 
> -4. send packets mismatched the pattern::
> -
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="192
> .168.1.1", dst="192.168.1.2")/SCTP(sport=25,dport=23)/Raw("x" *
> 80)],iface="ens786f0",count=1)
> -     sendp([Ether(src="10:22:33:44:55:66",
> dst="00:11:22:33:44:55",type=0x8100)/Dot1Q(vlan=1,type=0x86dd)/IPv6(src="C
> DCD:910A:2222:5498:8475:1111:3900:1536",
> dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/R
> aw("x" * 80)],iface="ens786f0",count=1)
> -
> -  check the hash values not exist.
> +4. send packets mismatched the pattern, check the hash values not exist.
> 
>  5. destroy the rule::
> 
>       testpmd> flow destroy 0 rule 0
>       testpmd> flow list 0
> 
> -   check the rule not exists.
> -   send the matched packets, check the hash values the packets are not exist.
> +   check the rule not exists in the list.
> +   send the matched packets, check the hash values of the packets are not exist.
> 
>  Test case: MAC_VLAN_PPPOE_PAY (not supported in 20.08)
>  ======================================================
> @@ -6017,161 +4982,3 @@ Subcase 4: two rules, scope larger created first,
> and the smaller one created la
> 
>     send a MAC_PPPOE_IPV4_UDP_PAY packet, check the hash values not exists.
> 
> -Test case: negative cases
> -=========================
> -
> -Subcase 1: wrong hash input set
> --------------------------------
> -
> -1. validate a rule with wrong input set::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types l2-src-only l2-dst-only end key_len 0 queues end / end
> -
> -   get the error message::
> -
> -     Invalid input set: Invalid argument
> -
> -   create a rule with wrong hash input set::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss
> types l2-src-only l2-dst-only end key_len 0 queues end / end
> -
> -   Failed to create flow, report error message::
> -
> -     Invalid input set: Invalid argument
> -
> -2. validate a rule with wrong hash type::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-tcp end key_len 0 queues end / end
> -
> -   get the error message::
> -
> -     Invalid input set: Invalid argument
> -
> -   create a rule with wrong hash type::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss types ipv4-tcp end key_len 0 queues end / end
> -
> -   Failed to create flow, report error message::
> -
> -     Invalid input set: Invalid argument
> -
> -3. validate a rule with wrong symmetric hash input set::
> -
> -     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss func symmetric_toeplitz types ipv4-udp l3-src-only end key_len 0
> queues end / end
> -
> -   get the error message::
> -
> -     Invalid input set: Invalid argument
> -
> -   create a rule with wrong symmetric hash input set::
> -
> -     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end
> actions rss func symmetric_toeplitz types ipv4-udp l3-src-only end key_len 0
> queues end / end
> -
> -   Failed to create flow, report error message::
> -
> -     Invalid input set: Invalid argument
> -
> -4. check the rule list::
> -
> -     testpmd> flow list 0
> -
> -  there is no listed.
> -
> -Subcase 2: void action
> -----------------------
> -
> -1. validate a rule with void action::
> -
> -     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / pfcp / end actions
> end
> -
> -   get the error message::
> -
> -     NULL action.: Invalid argument
> -
> -   create a rule with void action::
> -
> -     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions
> end
> -
> -   Failed to create flow, report message::
> -
> -     NULL action.: Invalid argument
> -
> -2. check the rule list::
> -
> -     testpmd> flow list 0
> -
> -   there is no rule listed.
> -
> -Subcase 3: delete a non-existing rule
> --------------------------------------
> -
> -1. show the rule list of port 0::
> -
> -     testpmd> flow list 0
> -
> -   There is no rule listed.
> -
> -2. destroy rule 0 of port 0::
> -
> -     testpmd> flow destroy 0 rule 0
> -
> -   There is no error message reported.
> -
> -3. flush rules of port 0::
> -
> -     testpmd> flow flush 0
> -
> -   There is no error message reported.
> -
> -Subcase 4: unsupported pattern with OS default package
> -------------------------------------------------------
> -
> -1. load os default package and launch testpmd as step 3-5 in Prerequisites.
> -
> -2. validate unsupported patterns in OS default package::
> -
> -     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / pfcp / end actions
> rss types pfcp end key_len 0 queues end / end
> -     testpmd> flow validate 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions
> rss types l2tpv3 end key_len 0 queues end / end
> -     testpmd> flow validate 0 ingress pattern eth / ipv4 / esp / end actions rss
> types esp end key_len 0 queues end / end
> -     testpmd> flow validate 0 ingress pattern eth / ipv4 / ah / end actions rss
> types ah end key_len 0 queues end / end
> -
> -   get the error message::
> -
> -     Invalid input pattern: Invalid argument
> -
> -3. create unsupported patterns in OS default package::
> -
> -     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions
> rss types pfcp end key_len 0 queues end / end
> -     testpmd> flow create 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss
> types l2tpv3 end key_len 0 queues end / end
> -     testpmd> flow create 0 ingress pattern eth / ipv4 / esp / end actions rss types
> esp end key_len 0 queues end / end
> -     testpmd> flow create 0 ingress pattern eth / ipv4 / ah / end actions rss types
> ah end key_len 0 queues end / end
> -
> -4. check the rule list::
> -
> -     testpmd> flow list 0
> -
> -   there is no rule listed.
> -
> -Subcase 5: invalid port
> ------------------------
> -
> -1. create a rule with invalid port::
> -
> -     testpmd> flow create 1 ingress pattern eth / ipv4 / udp / pfcp / end actions
> rss types pfcp end key_len 0 queues end / end
> -
> -   Failed to create flow, report message::
> -
> -    No such device: No such device
> -
> -2. check the rule list on port 0::
> -
> -     testpmd> flow list 0
> -
> -   there is no rule listed.
> -   check on port 1::
> -
> -     testpmd> flow list 1
> -
> -   get the error message::
> -
> -     Invalid port 1
> --
> 2.17.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-03-25  7:24 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-25  5:07 [dts] [PATCH v1] test_plans/cvl_advanced_rss_pppoe: split pppoe case Hailin Xu
2021-03-25  7:24 ` Tu, Lijuan

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