get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/89816/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 89816,
    "url": "http://patches.dpdk.org/api/patches/89816/?format=api",
    "web_url": "http://patches.dpdk.org/project/dts/patch/20210325082834.3714-1-hailinx.xu@intel.com/",
    "project": {
        "id": 3,
        "url": "http://patches.dpdk.org/api/projects/3/?format=api",
        "name": "DTS",
        "link_name": "dts",
        "list_id": "dts.dpdk.org",
        "list_email": "dts@dpdk.org",
        "web_url": "",
        "scm_url": "git://dpdk.org/tools/dts",
        "webscm_url": "http://git.dpdk.org/tools/dts/",
        "list_archive_url": "https://inbox.dpdk.org/dts",
        "list_archive_url_format": "https://inbox.dpdk.org/dts/{}",
        "commit_url_format": ""
    },
    "msgid": "<20210325082834.3714-1-hailinx.xu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20210325082834.3714-1-hailinx.xu@intel.com",
    "date": "2021-03-25T08:28:34",
    "name": "[v2] test_plans/cvl_advanced_rss_pppoe: split pppoe case",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "5b2a3f6daddd60777225c27cfa7d7a38cab5cca2",
    "submitter": {
        "id": 1704,
        "url": "http://patches.dpdk.org/api/people/1704/?format=api",
        "name": "hailinx",
        "email": "hailinx.xu@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dts/patch/20210325082834.3714-1-hailinx.xu@intel.com/mbox/",
    "series": [
        {
            "id": 15872,
            "url": "http://patches.dpdk.org/api/series/15872/?format=api",
            "web_url": "http://patches.dpdk.org/project/dts/list/?series=15872",
            "date": "2021-03-25T08:28:34",
            "name": "[v2] test_plans/cvl_advanced_rss_pppoe: split pppoe case",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/15872/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/89816/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/89816/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dts-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 9D0C9A0A02;\n\tThu, 25 Mar 2021 09:29:10 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 694634067B;\n\tThu, 25 Mar 2021 09:29:10 +0100 (CET)",
            "from mga17.intel.com (mga17.intel.com [192.55.52.151])\n by mails.dpdk.org (Postfix) with ESMTP id 470F740147\n for <dts@dpdk.org>; Thu, 25 Mar 2021 09:29:07 +0100 (CET)",
            "from orsmga008.jf.intel.com ([10.7.209.65])\n by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 25 Mar 2021 01:29:04 -0700",
            "from unknown (HELO localhost.localdomain) ([10.240.183.55])\n by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 25 Mar 2021 01:29:01 -0700"
        ],
        "IronPort-SDR": [
            "\n ziF163MXxhC0oVqYWhIwRZudDZYQPkOY8zV8TyphrzHdolMO/tKjruHNQPzooz5qeh+98AicEC\n qNwxnZzBJRiA==",
            "\n RjdAFjC9O7oDFCvSszr0Q9lIElGjd0XhQZ0NcXrCjq6QJGtbA3RKH98y6RGHCAwkHoxP7bVVBw\n UUcMJ1Q4+ivA=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9933\"; a=\"170860623\"",
            "E=Sophos;i=\"5.81,277,1610438400\"; d=\"scan'208\";a=\"170860623\"",
            "E=Sophos;i=\"5.81,277,1610438400\"; d=\"scan'208\";a=\"415895002\""
        ],
        "From": "Hailin Xu <hailinx.xu@intel.com>",
        "To": "dts@dpdk.org",
        "Cc": "Hailin Xu <hailinx.xu@intel.com>",
        "Date": "Thu, 25 Mar 2021 16:28:34 +0800",
        "Message-Id": "<20210325082834.3714-1-hailinx.xu@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "Subject": "[dts] [PATCH v2] test_plans/cvl_advanced_rss_pppoe: split pppoe case",
        "X-BeenThere": "dts@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "test suite reviews and discussions <dts.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dts>,\n <mailto:dts-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dts/>",
        "List-Post": "<mailto:dts@dpdk.org>",
        "List-Help": "<mailto:dts-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dts>,\n <mailto:dts-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dts-bounces@dpdk.org",
        "Sender": "\"dts\" <dts-bounces@dpdk.org>"
    },
    "content": "1. split suite only pppoe cases is reserved, about vlan/esp/ah/l2tp/pfcp partial cases is split into a new suite(cvl_advanced_rss_vlan_esp_ah_l2tp_pfcp).\n2. modify suite name.\n\nSigned-off-by: Hailin Xu <hailinx.xu@intel.com>\n---\n\nv1: split pppoe case and modify suite name.\nv2: add commit message.\n \n ...t => cvl_advanced_rss_pppoe_test_plan.rst} | 3373 ++++++-----------\n 1 file changed, 1090 insertions(+), 2283 deletions(-)\n rename test_plans/{cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst => cvl_advanced_rss_pppoe_test_plan.rst} (81%)",
    "diff": "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\nsimilarity index 81%\nrename from test_plans/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst\nrename to test_plans/cvl_advanced_rss_pppoe_test_plan.rst\nindex 543eb94a..994e10ce 100644\n--- a/test_plans/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst\n+++ b/test_plans/cvl_advanced_rss_pppoe_test_plan.rst\n@@ -30,14 +30,14 @@\n    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n    OF THE POSSIBILITY OF SUCH DAMAGE.\n \n-=================================================\n-CVL: Advanced RSS FOR PPPOE/VLAN/ESP/AH/L2TP/PFCP\n-=================================================\n+===========================\n+CVL: Advanced RSS FOR PPPOE\n+===========================\n \n Description\n ===========\n \n-* Enable RSS for PPPOE/VLAN/ESP/AH/L2TP/PFCP packets.\n+* Enable RSS for PPPOE packets.\n * Symmetric hash for PPPOE packets.\n * Simple_xor hash for PPPOE packets.\n \n@@ -68,42 +68,6 @@ Pattern and input set\n     |                               +---------------------------+----------------------------------------------------------------------------------+\n     |                               | MAC_PPPOE_PAY             | eth, l2-src-only, l2-dst-only, pppoe                                             |\n     +-------------------------------+---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_VLAN_IPV4_PAY         | c-vlan                                                                           |\n-    |                               +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_VLAN_IPV4_UDP_PAY     | c-vlan                                                                           |\n-    |                               +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_VLAN_IPV4_TCP_PAY     | c-vlan                                                                           |\n-    |                               +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_VLAN_IPV4_SCTP_PAY    | c-vlan                                                                           |\n-    |             VLAN              +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_VLAN_IPV6_PAY         | c-vlan                                                                           |\n-    |                               +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_VLAN_IPV6_UDP_PAY     | c-vlan                                                                           |\n-    |                               +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_VLAN_IPV6_TCP_PAY     | c-vlan                                                                           |\n-    |                               +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_VLAN_IPV6_SCTP_PAY    | c-vlan                                                                           |\n-    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_IPV4_ESP              | esp                                                                              |\n-    |                               +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_IPV4_UDP_ESP          | esp                                                                              |\n-    |             ESP               +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_IPV6_ESP              | esp                                                                              |\n-    |                               +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_IPV6_UDP_ESP          | esp                                                                              |\n-    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_IPV4_AH               | ah                                                                               |\n-    |              AH               +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_IPV6_AH               | ah                                                                               |\n-    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_IPV4_L2TPv3           | l2tpv3                                                                           |\n-    |             L2TP              +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_IPV6_L2TPv3           | l2tpv3                                                                           |\n-    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_IPV4_PFCP_SESSION     | pfcp                                                                             |\n-    |             PFCP              +---------------------------+----------------------------------------------------------------------------------+\n-    |                               | MAC_IPV6_PFCP_SESSION     | pfcp                                                                             |\n-    +-------------------------------+---------------------------+----------------------------------------------------------------------------------+\n \n .. note::\n \n@@ -142,11 +106,18 @@ Prerequisites\n    - dpdk: http://dpdk.org/git/dpdk\n    - scapy: http://www.secdev.org/projects/scapy/\n \n-3. Copy comm #1 package to /lib/firmware/intel/ice/ddp/ice.pkg,\n-   then load driver::\n+3. DDP Package Preparation::\n+\n+   - copy correct ``ice.pkg`` into ``/lib/firmware/updates/intel/ice/ddp/``.\n+   - unbind, then bind device back to ice.ko to update ddp package in the NIC.\n \n-     rmmod ice\n-     insmod ice.ko\n+.. warning::\n+\n+   Need unbind all ports in NIC, then bind device back to ice.ko\n+\n+.. note::\n+\n+   Of test all test cases, only comms package is expected.\n \n 4. Bind pf to dpdk driver::\n \n@@ -174,12 +145,26 @@ Prerequisites\n       >>> sys.path.append('/root')\n       >>> from pfcp import PFCP\n \n-Test case: MAC_IPV4_PFCP_SESSION\n-================================\n+Test case: MAC_PPPOE_PAY\n+========================\n+\n+.. Note::\n+\n+ - For PPPOE control packets, the hash input set should be\n+   src mac address + PPP session id, so only add LCP/IPCP packets to the\n+   L2_SRC_ONLY and SESSION_ID subcases in the case.\n+\n+packets mismatched the pattern::\n+\n+  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\")\n+  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\")\n+\n+Subcase 1: MAC_PPPOE_PAY_L2_SRC_ONLY\n+------------------------------------\n \n-1. validate a rule for RSS type of MAC_IPV4_PFCP_SESSION::\n+1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only end key_len 0 queues end / end\n \n    get the message::\n \n@@ -191,92 +176,61 @@ Test case: MAC_IPV4_PFCP_SESSION\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_IPV4_PFCP_SESSION::\n+2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end\n+     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_IPV4_PFCP_SESSION packet::\n+   * MAC_PPPOE_PAY packet::\n \n-       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\")\n+       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n \n-     change the field [SEID], send a packet::\n+     change the field [Source MAC], send a packet::\n \n-       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\")\n+       sendp([Ether(src=\"00:11:22:33:44:53\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n \n      check the hash value is different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:99\")/PPPoE(sessionid=7)/Raw(\"x\"*80)],iface=\"ens786f0\")\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern::\n-\n-     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\")\n-     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\")\n-\n-   check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Test case: MAC_IPV6_PFCP_SESSION\n-================================\n-\n-1. validate a rule for RSS type of MAC_IPV6_PFCP_SESSION::\n-\n-     testpmd> flow validate 0 ingress pattern eth / ipv6 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n+   * MAC_PPPOE_LCP_PAY packet::\n \n-     testpmd> flow list 0\n+       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)\n \n-   check the rule not exists in the list.\n+     change the field [Source MAC], send a packet::\n \n-2. create a rule for RSS type of MAC_IPV6_PFCP_SESSION::\n+       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)\n \n-     testpmd> flow create 0 ingress pattern eth / ipv6 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end\n-     testpmd> flow list 0\n+     check the hash value is different from the first packet.\n+     change other fields, send packets::\n \n-   check the rule exists in the list.\n+       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)\n \n-3. send matched packets\n+     check the hash values are the same as the first packet.\n \n-   * MAC_IPV6_PFCP_SESSION packet::\n+   * MAC_PPPOE_IPCP_PAY packet::\n \n-       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\")\n+       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)\n \n-     change the field [SEID], send a packet::\n+     change the field [Source MAC], send a packet::\n \n-       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\")\n+       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)\n \n      check the hash value is different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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)\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern::\n-\n-     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\")\n-     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\")\n-\n-   check the hash values not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n@@ -286,12 +240,12 @@ Test case: MAC_IPV6_PFCP_SESSION\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_IPV4_L2TPv3\n-==========================\n+Subcase 2: MAC_PPPOE_PAY_L2_DST_ONLY\n+------------------------------------\n \n-1. validate a rule for RSS type of MAC_IPV4_L2TPv3::\n+1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n \n    get the message::\n \n@@ -303,36 +257,31 @@ Test case: MAC_IPV4_L2TPv3\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_IPV4_L2TPv3::\n+2. create a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end\n+     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_IPV4_L2TPv3 packet::\n+   * MAC_PPPOE_PAY packet::\n \n-       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\")\n+       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n \n-     change the field [session_id], send a packet::\n+     change the field [Dest MAC], send a packet::\n \n-       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\")\n+       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:99\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n \n      check the hash value is different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern::\n+       sendp([Ether(src=\"00:11:22:33:44:53\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=7)/Raw(\"x\"*80)],iface=\"ens786f0\")\n \n-     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\")\n-     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\")\n+   check the hash values are the same as the first packet.\n \n-   check the hash values not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n@@ -342,12 +291,12 @@ Test case: MAC_IPV4_L2TPv3\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_IPV6_L2TPv3\n-==========================\n+Subcase 3: MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY\n+------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_IPV6_L2TPv3::\n+1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / ipv6 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth end key_len 0 queues end / end\n \n    get the message::\n \n@@ -359,36 +308,33 @@ Test case: MAC_IPV6_L2TPv3\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_IPV6_L2TPv3::\n+2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / ipv6 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end\n+     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_IPV6_L2TPv3 packet::\n+   * MAC_PPPOE_PAY packet::\n \n-       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\")\n+       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n \n-     change the field [session_id], send a packet::\n+     change the fields [Source MAC][Dest MAC], send packets::\n \n-       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\")\n+       sendp([Ether(src=\"00:11:22:33:44:53\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:99\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+       sendp([Ether(src=\"00:11:22:33:44:53\", dst=\"10:22:33:44:55:99\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n \n-     check the hash value is different from the first packet.\n+     check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=7)/Raw(\"x\"*80)],iface=\"ens786f0\")\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern::\n-\n-     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\")\n-     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\")\n-\n-   check the hash values not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n@@ -398,12 +344,12 @@ Test case: MAC_IPV6_L2TPv3\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_IPV4_ESP\n-=======================\n+Subcase 4: MAC_PPPOE_PAY_SESSION_ID\n+-----------------------------------\n \n-1. validate a rule for RSS type of MAC_IPV4_ESP::\n+1. validate a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::\n \n-     testpmd> flow validate 0 ingress pattern eth / ipv4 / esp / end actions rss types esp end key_len 0 queues end / end\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types pppoe end key_len 0 queues end / end\n \n    get the message::\n \n@@ -415,36 +361,46 @@ Test case: MAC_IPV4_ESP\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_IPV4_ESP::\n+2. create a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::\n \n-     testpmd> flow create 0 ingress pattern eth / ipv4 / esp / end actions rss types esp end key_len 0 queues end / end\n+     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types pppoe end key_len 0 queues end / end\n      testpmd> flow list 0\n \n-   check the rule exists in the list\n+   check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_IPV4_ESP packet::\n+   * MAC_PPPOE_LCP_PAY packet::\n \n-       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\")\n+       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)\n \n-     change the field [spi], send a packet::\n+     change the field [Session ID], send a packet::\n \n-       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\")\n+       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)\n \n      check the hash value is different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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)\n+\n+     check the hash values are the same as the first packet.\n \n-   check the hash values are the same as the first packet.\n+   * MAC_PPPOE_IPCP_PAY packet::\n+\n+       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)\n+\n+     change the field [Session ID], send a packet::\n \n-4. send packets mismatched the pattern::\n+       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)\n+\n+     check the hash value is different from the first packet.\n+     change other fields, send packets::\n \n-     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\")\n-     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\")\n+       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)\n+\n+     check the hash values are the same as the first packet.\n \n-   check the hash values not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n@@ -454,12 +410,12 @@ Test case: MAC_IPV4_ESP\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_IPV4_UDP_ESP\n-===========================\n+Subcase 5: MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID\n+-----------------------------------------------\n \n-1. validate a rule for RSS type of MAC_IPV4_UDP_ESP::\n+1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::\n \n-     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / esp / end actions rss types esp end key_len 0 queues end / end\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only pppoe end key_len 0 queues end / end\n \n    get the message::\n \n@@ -471,37 +427,50 @@ Test case: MAC_IPV4_UDP_ESP\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_IPV4_UDP_ESP::\n+2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::\n \n-     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / esp / end actions rss types esp end key_len 0 queues end / end\n+     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only pppoe end key_len 0 queues end / end\n      testpmd> flow list 0\n \n-   check the rule exists in the list\n+   check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_IPV4_UDP_ESP packet::\n+   * MAC_PPPOE_LCP_PAY packet::\n \n-       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\")\n+       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)\n \n-     change the field [spi], send a packet::\n+     change the fields [Source MAC][Session ID], send a packet::\n \n-       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\")\n+       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)\n+       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)\n+       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)\n \n-     check the hash value is different from the first packet.\n+     check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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)\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern::\n+   * MAC_PPPOE_IPCP_PAY packet::\n+\n+       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)\n+\n+     change the fields [Source MAC][Session ID], send a packet::\n+\n+       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)\n+       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)\n+       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)\n+\n+     check the hash values are different from the first packet.\n+     change other fields, send packets::\n+\n+       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)\n \n-     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\")\n-     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\")\n-     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\")\n+     check the hash values are the same as the first packet.\n \n-   check the hash values not exist.\n+4. send packets mismatched the rule, check the hash values not exist.\n \n 5. destroy the rule::\n \n@@ -511,12 +480,22 @@ Test case: MAC_IPV4_UDP_ESP\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_IPV6_ESP\n-=======================\n+Test case: MAC_PPPOE_IPV4_PAY\n+=============================\n+\n+packets mismatched the pattern::\n+\n+  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\")\n+  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\")\n+  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\")\n+  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\")\n+\n+Subcase 1: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY\n+-----------------------------------------\n \n-1. validate a rule for RSS type of MAC_IPV6_ESP::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / ipv6 / esp / end actions rss types esp end key_len 0 queues end / end\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end\n \n    get the message::\n \n@@ -528,36 +507,46 @@ Test case: MAC_IPV6_ESP\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_IPV6_ESP::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / ipv6 / esp / end actions rss types esp end key_len 0 queues end / end\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end\n      testpmd> flow list 0\n \n-   check the rule exists in the list\n+   check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_IPV6_ESP packet::\n+   * MAC_PPPOE_IPV4_PAY packet::\n \n-       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\")\n+       sendp([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\")\n \n-     change the field [spi], send a packet::\n+     change the field [Source MAC], send packets::\n \n-       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\")\n+       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\")\n \n-     check the hash value is different from the first packet.\n+     check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern::\n+   * MAC_PPPOE_IPV4_FRAG packet::\n+\n+       sendp([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\")\n+\n+     change the field [Source MAC], send packets::\n+\n+       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\")\n+\n+     check the hash values are different from the first packet.\n+     change other fields, send packets::\n+\n+       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\")\n \n-     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\")\n-     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\")\n+     check the hash values are the same as the first packet.\n \n-   check the hash values not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n@@ -567,12 +556,12 @@ Test case: MAC_IPV6_ESP\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_IPV6_UDP_ESP\n-===========================\n+Subcase 2: MAC_PPPOE_IPV4_PAY_L2_DST_ONLY\n+-----------------------------------------\n \n-1. validate a rule for RSS type of MAC_IPV6_UDP_ESP::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / ipv6 / udp / esp / end actions rss types esp end key_len 0 queues end / end\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n \n    get the message::\n \n@@ -584,37 +573,46 @@ Test case: MAC_IPV6_UDP_ESP\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_IPV6_UDP_ESP::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / ipv6 / udp / esp / end actions rss types esp end key_len 0 queues end / end\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n      testpmd> flow list 0\n \n-   check the rule exists in the list\n+   check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_IPV6_UDP_ESP packet::\n+   * MAC_PPPOE_IPV4_PAY packet::\n \n-       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\")\n+       sendp([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\")\n \n-     change the field [spi], send a packet::\n+     change the field [Dest MAC], send packets::\n \n-       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\")\n+       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\")\n \n-     check the hash value is different from the first packet.\n+     check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern::\n+   * MAC_PPPOE_IPV4_FRAG packet::\n+\n+       sendp([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\")\n+\n+     change the field [Dest MAC], send packets::\n+\n+       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\")\n+\n+     check the hash values are different from the first packet.\n+     change other fields, send packets::\n+\n+       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\")\n \n-     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\")\n-     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\")\n-     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\")\n+     check the hash values are the same as the first packet.\n \n-   check the hash values not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n@@ -624,12 +622,12 @@ Test case: MAC_IPV6_UDP_ESP\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_IPV4_AH\n-======================\n+Subcase 3: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY\n+-----------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_IPV4_AH::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / ipv4 / ah / end actions rss types ah end key_len 0 queues end / end\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth end key_len 0 queues end / end\n \n    get the message::\n \n@@ -641,999 +639,46 @@ Test case: MAC_IPV4_AH\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_IPV4_AH::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / ipv4 / ah / end actions rss types ah end key_len 0 queues end / end\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_IPV4_AH packet::\n+   * MAC_PPPOE_IPV4_PAY packet::\n \n-       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\")\n+       sendp([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\")\n \n-     change the field [spi], send a packet::\n+     change the fields [Source MAC][Dest MAC], send packets::\n \n-       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\")\n+       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\")\n+       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\")\n+       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\")\n \n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern::\n-\n-     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\")\n-     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\")\n-\n-   check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Test case: MAC_IPV6_AH\n-======================\n-\n-1. validate a rule for RSS type of MAC_IPV6_AH::\n-\n-     testpmd> flow validate 0 ingress pattern eth / ipv6 / ah / end actions rss types ah end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_IPV6_AH::\n-\n-     testpmd> flow create 0 ingress pattern eth / ipv6 / ah / end actions rss types ah end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_IPV6_AH packet::\n-\n-       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\")\n-\n-     change the field [spi], send a packet::\n-\n-       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\")\n-\n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern::\n-\n-     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\")\n-     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\")\n-\n-   check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Test case: MAC_PPPOE_PAY\n-========================\n-\n-Note: For PPPOE control packets, the hash input set should be\n-src mac address + PPP session id, so only add LCP/IPCP packets to the\n-L2_SRC_ONLY and SESSION_ID subcases in the case.\n-\n-packets mismatched the pattern::\n-\n-  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\")\n-  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\")\n-\n-Subcase 1: MAC_PPPOE_PAY_L2_SRC_ONLY\n-------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_PAY packet::\n-\n-       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n-\n-     change the field [Source MAC], send a packet::\n-\n-       sendp([Ether(src=\"00:11:22:33:44:53\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n-\n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n-\n-       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:99\")/PPPoE(sessionid=7)/Raw(\"x\"*80)],iface=\"ens786f0\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_LCP_PAY packet::\n-\n-       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)\n-\n-     change the field [Source MAC], send a packet::\n-\n-       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)\n-\n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n-\n-       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)\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPCP_PAY packet::\n-\n-       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)\n-\n-     change the field [Source MAC], send a packet::\n-\n-       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)\n-\n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n-\n-       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)\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 2: MAC_PPPOE_PAY_L2_DST_ONLY\n-------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_PAY_L2_DST_ONLY::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_PAY packet::\n-\n-       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n-\n-     change the field [Dest MAC], send a packet::\n-\n-       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:99\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n-\n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n-\n-       sendp([Ether(src=\"00:11:22:33:44:53\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=7)/Raw(\"x\"*80)],iface=\"ens786f0\")\n-\n-   check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 3: MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY\n-------------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_PAY packet::\n-\n-       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n-\n-     change the fields [Source MAC][Dest MAC], send packets::\n-\n-       sendp([Ether(src=\"00:11:22:33:44:53\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n-       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:99\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n-       sendp([Ether(src=\"00:11:22:33:44:53\", dst=\"10:22:33:44:55:99\")/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=7)/Raw(\"x\"*80)],iface=\"ens786f0\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 4: MAC_PPPOE_PAY_SESSION_ID\n-===================================\n-\n-1. validate a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types pppoe end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_PAY_SESSION_ID::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types pppoe end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_LCP_PAY packet::\n-\n-       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)\n-\n-     change the field [Session ID], send a packet::\n-\n-       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)\n-\n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n-\n-       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)\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPCP_PAY packet::\n-\n-       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)\n-\n-     change the field [Session ID], send a packet::\n-\n-       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)\n-\n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n-\n-       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)\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 5: MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID\n------------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only pppoe end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_PAY_L2_SRC_ONLY_SESSION_ID::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only pppoe end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_LCP_PAY packet::\n-\n-       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)\n-\n-     change the fields [Source MAC][Session ID], send a packet::\n-\n-       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)\n-       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)\n-       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)\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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)\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPCP_PAY packet::\n-\n-       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)\n-\n-     change the fields [Source MAC][Session ID], send a packet::\n-\n-       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)\n-       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)\n-       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)\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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)\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the rule, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Test case: MAC_PPPOE_IPV4_PAY\n-=============================\n-\n-packets mismatched the pattern::\n-\n-  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\")\n-  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\")\n-  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\")\n-  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\")\n-\n-Subcase 1: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY\n------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_IPV4_PAY packet::\n-\n-       sendp([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\")\n-\n-     change the field [Source MAC], send packets::\n-\n-       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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPV4_FRAG packet::\n-\n-       sendp([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\")\n-\n-     change the field [Source MAC], send packets::\n-\n-       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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 2: MAC_PPPOE_IPV4_PAY_L2_DST_ONLY\n------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_DST_ONLY::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_IPV4_PAY packet::\n-\n-       sendp([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\")\n-\n-     change the field [Dest MAC], send packets::\n-\n-       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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPV4_FRAG packet::\n-\n-       sendp([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\")\n-\n-     change the field [Dest MAC], send packets::\n-\n-       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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 3: MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY\n------------------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_IPV4_PAY packet::\n-\n-       sendp([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\")\n-\n-     change the fields [Source MAC][Dest MAC], send packets::\n-\n-       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\")\n-       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\")\n-       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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPV4_FRAG packet::\n-\n-       sendp([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\")\n-\n-     change the fields [Source MAC][Dest MAC], send packets::\n-\n-       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\")\n-       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\")\n-       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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 4: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY\n------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_IPV4_PAY packet::\n-\n-       sendp([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\")\n-\n-     change the field [Source IP], send packets::\n-\n-       sendp([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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPV4_FRAG packet::\n-\n-       sendp([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\")\n-\n-     change the field [Source IP], send packets::\n-\n-       sendp([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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 5: MAC_PPPOE_IPV4_PAY_L3_DST_ONLY\n------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_IPV4_PAY packet::\n-\n-       sendp([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\")\n-\n-     change the field [Dest IP], send packets::\n-\n-       sendp([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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPV4_FRAG packet::\n-\n-       sendp([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\")\n-\n-     change the field [Dest IP], send packets::\n-\n-       sendp([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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 6: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY\n------------------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_IPV4_PAY packet::\n-\n-       sendp([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\")\n-\n-     change the fields [Source IP][Dest IP], send packets::\n-\n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPV4_FRAG packet::\n-\n-       sendp([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\")\n-\n-     change the fields [Source IP][Dest IP], send packets::\n-\n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Test case: MAC_PPPOE_IPV4_UDP_PAY\n-=================================\n-\n-packets mismatched the pattern::\n-\n-  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\")\n-  sendp([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\")\n-  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\")\n-\n-Subcase 1: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY\n----------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::\n-\n-     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\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::\n-\n-     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\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_IPV4_UDP_PAY packet::\n-\n-       sendp([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\")\n-\n-     change the field [Source MAC], send packets::\n-\n-       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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 2: MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY\n----------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::\n-\n-     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\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::\n-\n-     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\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_IPV4_UDP_PAY packet::\n-\n-       sendp([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\")\n-\n-     change the field [Dest MAC], send packets::\n-\n-       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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 3: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n----------------------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end\n-     testpmd> flow list 0\n+     check the hash values are different from the first packet.\n+     change other fields, send packets::\n \n-   check the rule exists in the list.\n+       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\")\n \n-3. send matched packets\n+     check the hash values are the same as the first packet.\n \n-   * MAC_PPPOE_IPV4_UDP_PAY packet::\n+   * MAC_PPPOE_IPV4_FRAG packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n      change the fields [Source MAC][Dest MAC], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -1647,12 +692,12 @@ Subcase 3: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 4: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY\n----------------------------------------------\n+Subcase 4: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY\n+-----------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end\n \n    get the message::\n \n@@ -1664,27 +709,42 @@ Subcase 4: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV4_UDP_PAY packet::\n+   * MAC_PPPOE_IPV4_PAY packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n      change the field [Source IP], send packets::\n \n-       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n+\n+     check the hash values are the same as the first packet.\n+\n+   * MAC_PPPOE_IPV4_FRAG packet::\n+\n+       sendp([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\")\n+\n+     change the field [Source IP], send packets::\n+\n+       sendp([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\")\n+\n+     check the hash values are different from the first packet.\n+     change other fields, send packets::\n+\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -1698,12 +758,12 @@ Subcase 4: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 5: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY\n----------------------------------------------\n+Subcase 5: MAC_PPPOE_IPV4_PAY_L3_DST_ONLY\n+-----------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end\n \n    get the message::\n \n@@ -1715,78 +775,42 @@ Subcase 5: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_DST_ONLY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV4_UDP_PAY packet::\n+   * MAC_PPPOE_IPV4_PAY packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n      change the field [Dest IP], send packets::\n \n-       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 6: MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY\n----------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::\n-\n-     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\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::\n-\n-     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\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_IPV4_UDP_PAY packet::\n+   * MAC_PPPOE_IPV4_FRAG packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n-     change the field [Source Port], send packets::\n+     change the field [Dest IP], send packets::\n \n-       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -1800,12 +824,12 @@ Subcase 6: MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 7: MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY\n----------------------------------------------\n+Subcase 6: MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY\n+-----------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\n \n    get the message::\n \n@@ -1817,80 +841,46 @@ Subcase 7: MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY_L3_DST_ONLY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV4_UDP_PAY packet::\n+   * MAC_PPPOE_IPV4_PAY packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n-     change the field [Dest Port], send packets::\n+     change the fields [Source IP][Dest IP], send packets::\n \n-       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern, check the hash values not exist.\n-\n-5. destroy the rule::\n-\n-     testpmd> flow destroy 0 rule 0\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-   send the matched packets, check the hash values of the packets are not exist.\n-\n-Subcase 8: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n----------------------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n-\n-     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\n-\n-   get the message::\n-\n-     Flow rule validated\n-\n-   check the flow list::\n-\n-     testpmd> flow list 0\n-\n-   check the rule not exists in the list.\n-\n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n-\n-     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\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_IPV4_UDP_PAY packet::\n+   * MAC_PPPOE_IPV4_FRAG packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n-     change the fields [Source IP][Source Port], send packets::\n+     change the fields [Source IP][Dest IP], send packets::\n \n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -1904,12 +894,21 @@ Subcase 8: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n----------------------------------------------------------\n+Test case: MAC_PPPOE_IPV4_UDP_PAY\n+=================================\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n+packets mismatched the pattern::\n \n-     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\n+  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\")\n+  sendp([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\")\n+  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\")\n+\n+Subcase 1: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY\n+---------------------------------------------\n+\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::\n+\n+     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\n \n    get the message::\n \n@@ -1921,9 +920,9 @@ Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -1934,16 +933,14 @@ Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n \n        sendp([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\")\n \n-     change the fields [Source IP][Dest Port], send packets::\n+     change the field [Source MAC], send packets::\n \n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -1957,12 +954,12 @@ Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n-----------------------------------------------------------\n+Subcase 2: MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -1974,9 +971,9 @@ Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_DST_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -1987,16 +984,14 @@ Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n \n        sendp([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\")\n \n-     change the fields [Dest IP][Source Port], send packets::\n-\n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n+     change the field [Dest MAC], send packets::\n+\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2010,12 +1005,12 @@ Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY\n-----------------------------------------------------------\n+Subcase 3: MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n+---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end\n \n    get the message::\n \n@@ -2027,9 +1022,9 @@ Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -2040,18 +1035,18 @@ Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY\n \n        sendp([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\")\n \n-     change the fields [Dest IP][Dest Port], send packets::\n+     change the fields [Source MAC][Dest MAC], send packets::\n \n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n-   check the hash values are the same as the first packet.\n+     check the hash values are the same as the first packet.\n \n 4. send packets mismatched the pattern, check the hash values not exist.\n \n@@ -2063,12 +1058,12 @@ Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 12: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY\n-----------------------------------------------------------------------------------\n+Subcase 4: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -2080,9 +1075,9 @@ Subcase 12: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -2093,18 +1088,14 @@ Subcase 12: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n \n        sendp([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\")\n \n-     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::\n+     change the field [Source IP], send packets::\n \n        sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2118,12 +1109,12 @@ Subcase 12: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4\n----------------------------------------\n+Subcase 5: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -2135,9 +1126,9 @@ Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -2148,16 +1139,14 @@ Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4\n \n        sendp([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\")\n \n-     change the fields [Source IP][Dest IP], send packets::\n+     change the field [Dest IP], send packets::\n \n-       sendp([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\")\n        sendp([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\")\n-       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2171,21 +1160,12 @@ Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_PPPOE_IPV4_TCP_PAY\n-=================================\n-\n-packets mismatched the pattern::\n-\n-  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\")\n-  sendp([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\")\n-  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\")\n-\n-Subcase 1: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY\n+Subcase 6: MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY\n ---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -2197,27 +1177,27 @@ Subcase 1: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV4_TCP_PAY packet::\n+   * MAC_PPPOE_IPV4_UDP_PAY packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n-     change the field [Source MAC], send packets::\n+     change the field [Source Port], send packets::\n \n-       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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2231,12 +1211,12 @@ Subcase 1: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 2: MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY\n+Subcase 7: MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY\n ---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -2248,27 +1228,27 @@ Subcase 2: MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV4_TCP_PAY packet::\n+   * MAC_PPPOE_IPV4_UDP_PAY packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n-     change the field [Dest MAC], send packets::\n+     change the field [Dest Port], send packets::\n \n-       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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2282,12 +1262,12 @@ Subcase 2: MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 3: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n+Subcase 8: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n ---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -2299,29 +1279,29 @@ Subcase 3: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV4_TCP_PAY packet::\n+   * MAC_PPPOE_IPV4_UDP_PAY packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n-     change the fields [Source MAC][Dest MAC], send packets::\n+     change the fields [Source IP][Source Port], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2335,12 +1315,12 @@ Subcase 3: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 4: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY\n----------------------------------------------\n+Subcase 9: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n+---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -2352,27 +1332,29 @@ Subcase 4: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV4_TCP_PAY packet::\n+   * MAC_PPPOE_IPV4_UDP_PAY packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n-     change the field [Source IP], send packets::\n+     change the fields [Source IP][Dest Port], send packets::\n \n-       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2386,12 +1368,12 @@ Subcase 4: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 5: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY\n----------------------------------------------\n+Subcase 10: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n+----------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -2403,27 +1385,29 @@ Subcase 5: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV4_TCP_PAY packet::\n+   * MAC_PPPOE_IPV4_UDP_PAY packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n-     change the fields [Dest IP], send packets::\n+     change the fields [Dest IP][Source Port], send packets::\n \n-       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2437,12 +1421,12 @@ Subcase 5: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 6: MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY\n----------------------------------------------\n+Subcase 11: MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY\n+----------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -2454,29 +1438,31 @@ Subcase 6: MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV4_TCP_PAY packet::\n+   * MAC_PPPOE_IPV4_UDP_PAY packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n-     change the field [Source Port], send packets::\n+     change the fields [Dest IP][Dest Port], send packets::\n \n-       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n-     check the hash values are the same as the first packet.\n+   check the hash values are the same as the first packet.\n \n 4. send packets mismatched the pattern, check the hash values not exist.\n \n@@ -2488,12 +1474,12 @@ Subcase 6: MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 7: MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY\n----------------------------------------------\n+Subcase 12: MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY\n+----------------------------------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end\n \n    get the message::\n \n@@ -2505,27 +1491,31 @@ Subcase 7: MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV4_TCP_PAY packet::\n+   * MAC_PPPOE_IPV4_UDP_PAY packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n-     change the field [Dest Port], send packets::\n+     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::\n \n-       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2539,12 +1529,12 @@ Subcase 7: MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 8: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n----------------------------------------------------------\n+Subcase 13: MAC_PPPOE_IPV4_UDP_PAY_IPV4\n+---------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end\n \n    get the message::\n \n@@ -2556,29 +1546,29 @@ Subcase 8: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV4_TCP_PAY packet::\n+   * MAC_PPPOE_IPV4_UDP_PAY packet::\n \n-       sendp([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\")\n+       sendp([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\")\n \n-     change the fields [Source IP][Source Port], send packets::\n+     change the fields [Source IP][Dest IP], send packets::\n \n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2592,12 +1582,21 @@ Subcase 8: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n----------------------------------------------------------\n+Test case: MAC_PPPOE_IPV4_TCP_PAY\n+=================================\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n+packets mismatched the pattern::\n \n-     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\n+  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\")\n+  sendp([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\")\n+  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\")\n+\n+Subcase 1: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY\n+---------------------------------------------\n+\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::\n+\n+     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\n \n    get the message::\n \n@@ -2609,9 +1608,9 @@ Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -2622,16 +1621,14 @@ Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n \n        sendp([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\")\n \n-     change the fields [Source IP][Dest Port], send packets::\n+     change the field [Source MAC], send packets::\n \n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2645,12 +1642,12 @@ Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n-----------------------------------------------------------\n+Subcase 2: MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -2662,9 +1659,9 @@ Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_DST_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -2675,16 +1672,14 @@ Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n \n        sendp([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\")\n \n-     change the fields [Dest IP][Source Port], send packets::\n+     change the field [Dest MAC], send packets::\n \n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2698,12 +1693,12 @@ Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY\n-----------------------------------------------------------\n+Subcase 3: MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n+---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end\n \n    get the message::\n \n@@ -2715,9 +1710,9 @@ Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -2728,16 +1723,16 @@ Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY\n \n        sendp([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\")\n \n-     change the fields [Dest IP][Dest Port], send packets::\n+     change the fields [Source MAC][Dest MAC], send packets::\n \n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2751,12 +1746,12 @@ Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 12: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY\n-----------------------------------------------------------------------------------\n+Subcase 4: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -2768,9 +1763,9 @@ Subcase 12: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -2781,18 +1776,14 @@ Subcase 12: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n \n        sendp([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\")\n \n-     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::\n+     change the field [Source IP], send packets::\n \n        sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n-       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2806,22 +1797,12 @@ Subcase 12: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_PPPOE_IPV6_PAY\n-=============================\n-\n-packets mismatched the pattern::\n-\n-  sendp([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\")\n-  sendp([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\")\n-  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\")\n-  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\")\n-\n-Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY\n------------------------------------------\n+Subcase 5: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -2833,42 +1814,27 @@ Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_PAY packet::\n-\n-       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\")\n-\n-     change the field [Source MAC], send packets::\n-\n-       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\")\n-\n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPV6_FRAG packet::\n+   * MAC_PPPOE_IPV4_TCP_PAY packet::\n \n-       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\")\n+       sendp([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\")\n \n-     change the field [Source MAC], send packets::\n+     change the fields [Dest IP], send packets::\n \n-       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\")\n+       sendp([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\")\n \n-     check the hash value is different from the first packet.\n+     check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2882,12 +1848,12 @@ Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY\n------------------------------------------\n+Subcase 6: MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -2899,42 +1865,27 @@ Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_PAY packet::\n-\n-       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\")\n-\n-     change the field [Dest MAC], send packets::\n-\n-       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\")\n-\n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPV6_FRAG packet::\n+   * MAC_PPPOE_IPV4_TCP_PAY packet::\n \n-       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\")\n+       sendp([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\")\n \n-     change the field [Dest MAC], send packets::\n+     change the field [Source Port], send packets::\n \n-       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\")\n+       sendp([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\")\n \n-     check the hash value is different from the first packet.\n+     check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -2948,12 +1899,12 @@ Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 3: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY\n------------------------------------------------------\n+Subcase 7: MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -2965,46 +1916,27 @@ Subcase 3: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_PAY packet::\n-\n-       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\")\n-\n-     change the field [Source MAC][Dest MAC], send packets::\n-\n-       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\")\n-       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\")\n-       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\")\n-\n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPV6_FRAG packet::\n+   * MAC_PPPOE_IPV4_TCP_PAY packet::\n \n-       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\")\n+       sendp([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\")\n \n-     change the field [Source MAC][Dest MAC], send packets::\n+     change the field [Dest Port], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       sendp([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\")\n \n-     check the hash value is different from the first packet.\n+     check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3018,12 +1950,12 @@ Subcase 3: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY\n------------------------------------------\n+Subcase 8: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n+---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -3035,42 +1967,29 @@ Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end\n-     testpmd> flow list 0\n-\n-   check the rule exists in the list.\n-\n-3. send matched packets\n-\n-   * MAC_PPPOE_IPV6_PAY packet::\n-\n-       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\")\n-\n-     change the field [Source IP], send packets::\n-\n-       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\")\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n \n-     check the hash value is different from the first packet.\n-     change other fields, send packets::\n+     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\n+     testpmd> flow list 0\n \n-       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\")\n+   check the rule exists in the list.\n \n-     check the hash values are the same as the first packet.\n+3. send matched packets\n \n-   * MAC_PPPOE_IPV6_FRAG packet::\n+   * MAC_PPPOE_IPV4_TCP_PAY packet::\n \n-       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\")\n+       sendp([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\")\n \n-     change the field [Source IP], send packets::\n+     change the fields [Source IP][Source Port], send packets::\n \n-       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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n-     check the hash value is different from the first packet.\n+     check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3084,12 +2003,12 @@ Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY\n------------------------------------------\n+Subcase 9: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n+---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -3101,42 +2020,29 @@ Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_PAY packet::\n-\n-       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\")\n-\n-     change the field [Dest IP], send packets::\n-\n-       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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPV6_FRAG packet::\n+   * MAC_PPPOE_IPV4_TCP_PAY packet::\n \n-       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\")\n+       sendp([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\")\n \n-     change the field [Dest IP], send packets::\n+     change the fields [Source IP][Dest Port], send packets::\n \n-       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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3150,12 +2056,12 @@ Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 6: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY\n------------------------------------------------------\n+Subcase 10: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n+----------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -3167,46 +2073,29 @@ Subcase 6: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_PAY packet::\n-\n-       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\")\n-\n-     change the fields [Source IP][Dest IP], send packets::\n-\n-       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\")\n-       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\")\n-       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\")\n-\n-     check the hash values are different from the first packet.\n-     change other fields, send packets::\n-\n-       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\")\n-\n-     check the hash values are the same as the first packet.\n-\n-   * MAC_PPPOE_IPV6_FRAG packet::\n+   * MAC_PPPOE_IPV4_TCP_PAY packet::\n \n-       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\")\n+       sendp([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\")\n \n-     change the fields [Source IP][Dest IP], send packets::\n+     change the fields [Dest IP][Source Port], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3220,21 +2109,12 @@ Subcase 6: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_PPPOE_IPV6_UDP_PAY\n-=================================\n-\n-packets mismatched the pattern::\n-\n-  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\")\n-  sendp([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\")\n-  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\")\n-\n-Subcase 1: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY\n----------------------------------------------\n+Subcase 11: MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY\n+----------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -3246,27 +2126,29 @@ Subcase 1: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_UDP_PAY packet::\n+   * MAC_PPPOE_IPV4_TCP_PAY packet::\n \n-       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\")\n+       sendp([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\")\n \n-     change the field [Source MAC], send packets::\n+     change the fields [Dest IP][Dest Port], send packets::\n \n-       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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3280,12 +2162,12 @@ Subcase 1: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 2: MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY\n----------------------------------------------\n+Subcase 12: MAC_PPPOE_IPV4_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY\n+----------------------------------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end\n \n    get the message::\n \n@@ -3297,27 +2179,31 @@ Subcase 2: MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_UDP_PAY packet::\n+   * MAC_PPPOE_IPV4_TCP_PAY packet::\n \n-       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\")\n+       sendp([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\")\n \n-     change the field [Dest MAC], send packets::\n+     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::\n \n-       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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n+       sendp([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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3331,12 +2217,22 @@ Subcase 2: MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 3: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n----------------------------------------------------------\n+Test case: MAC_PPPOE_IPV6_PAY\n+=============================\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n+packets mismatched the pattern::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end\n+  sendp([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\")\n+  sendp([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\")\n+  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\")\n+  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\")\n+\n+Subcase 1: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY\n+-----------------------------------------\n+\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::\n+\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end\n \n    get the message::\n \n@@ -3348,29 +2244,42 @@ Subcase 3: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_UDP_PAY packet::\n+   * MAC_PPPOE_IPV6_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the fields [Source MAC][Dest MAC], send packets::\n+     change the field [Source MAC], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       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\")\n \n-     check the hash values are different from the first packet.\n+     check the hash value is different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n+\n+     check the hash values are the same as the first packet.\n+\n+   * MAC_PPPOE_IPV6_FRAG packet::\n+\n+       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\")\n+\n+     change the field [Source MAC], send packets::\n+\n+       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\")\n+\n+     check the hash value is different from the first packet.\n+     change other fields, send packets::\n+\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3384,12 +2293,12 @@ Subcase 3: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 4: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY\n----------------------------------------------\n+Subcase 2: MAC_PPPOE_IPV6_PAY_L2_DST_ONLY\n+-----------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n \n    get the message::\n \n@@ -3401,27 +2310,42 @@ Subcase 4: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_DST_ONLY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_UDP_PAY packet::\n+   * MAC_PPPOE_IPV6_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the field [Source IP], send packets::\n+     change the field [Dest MAC], send packets::\n \n-       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\")\n+       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\")\n \n-     check the hash values are different from the first packet.\n+     check the hash value is different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n+\n+     check the hash values are the same as the first packet.\n+\n+   * MAC_PPPOE_IPV6_FRAG packet::\n+\n+       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\")\n+\n+     change the field [Dest MAC], send packets::\n+\n+       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\")\n+\n+     check the hash value is different from the first packet.\n+     change other fields, send packets::\n+\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3435,12 +2359,12 @@ Subcase 4: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 5: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY\n----------------------------------------------\n-\n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::\n+Subcase 3: MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY\n+-----------------------------------------------------\n \n-     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\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n+\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth end key_len 0 queues end / end\n \n    get the message::\n \n@@ -3452,27 +2376,46 @@ Subcase 5: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_UDP_PAY packet::\n+   * MAC_PPPOE_IPV6_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the field [Dest IP], send packets::\n+     change the field [Source MAC][Dest MAC], send packets::\n \n-       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\")\n+       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\")\n+       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\")\n+       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\")\n \n-     check the hash values are different from the first packet.\n+     check the hash value is different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n+\n+     check the hash values are the same as the first packet.\n+\n+   * MAC_PPPOE_IPV6_FRAG packet::\n+\n+       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\")\n+\n+     change the field [Source MAC][Dest MAC], send packets::\n+\n+       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\")\n+       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\")\n+       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\")\n+\n+     check the hash value is different from the first packet.\n+     change other fields, send packets::\n+\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3486,12 +2429,12 @@ Subcase 5: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 6: MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY\n----------------------------------------------\n+Subcase 4: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY\n+-----------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end\n \n    get the message::\n \n@@ -3503,27 +2446,42 @@ Subcase 6: MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_UDP_PAY packet::\n+   * MAC_PPPOE_IPV6_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the field [Source Port], send packets::\n+     change the field [Source IP], send packets::\n \n-       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\")\n+       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\")\n \n-     check the hash values are different from the first packet.\n+     check the hash value is different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n+\n+     check the hash values are the same as the first packet.\n+\n+   * MAC_PPPOE_IPV6_FRAG packet::\n+\n+       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\")\n+\n+     change the field [Source IP], send packets::\n+\n+       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\")\n+\n+     check the hash value is different from the first packet.\n+     change other fields, send packets::\n+\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3537,12 +2495,12 @@ Subcase 6: MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 7: MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY\n----------------------------------------------\n+Subcase 5: MAC_PPPOE_IPV6_PAY_L3_DST_ONLY\n+-----------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end\n \n    get the message::\n \n@@ -3554,27 +2512,42 @@ Subcase 7: MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY_L3_DST_ONLY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_UDP_PAY packet::\n+   * MAC_PPPOE_IPV6_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the field [Dest Port], send packets::\n+     change the field [Dest IP], send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n+\n+     check the hash values are the same as the first packet.\n+\n+   * MAC_PPPOE_IPV6_FRAG packet::\n+\n+       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\")\n+\n+     change the field [Dest IP], send packets::\n+\n+       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\")\n+\n+     check the hash values are different from the first packet.\n+     change other fields, send packets::\n+\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3588,12 +2561,12 @@ Subcase 7: MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 8: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n----------------------------------------------------------\n+Subcase 6: MAC_PPPOE_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY\n+-----------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end\n \n    get the message::\n \n@@ -3605,29 +2578,46 @@ Subcase 8: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_PAY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_UDP_PAY packet::\n+   * MAC_PPPOE_IPV6_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the fields [Source IP][Source Port], send packets::\n+     change the fields [Source IP][Dest IP], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n+\n+     check the hash values are the same as the first packet.\n+\n+   * MAC_PPPOE_IPV6_FRAG packet::\n+\n+       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\")\n+\n+     change the fields [Source IP][Dest IP], send packets::\n+\n+       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\")\n+       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\")\n+       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\")\n+\n+     check the hash values are different from the first packet.\n+     change other fields, send packets::\n+\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3641,12 +2631,21 @@ Subcase 8: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n----------------------------------------------------------\n+Test case: MAC_PPPOE_IPV6_UDP_PAY\n+=================================\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n+packets mismatched the pattern::\n \n-     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\n+  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\")\n+  sendp([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\")\n+  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\")\n+\n+Subcase 1: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY\n+---------------------------------------------\n+\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::\n+\n+     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\n \n    get the message::\n \n@@ -3658,9 +2657,9 @@ Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -3671,18 +2670,16 @@ Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n \n        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\")\n \n-     change the fields [Source IP][Dest Port], send packets::\n+     change the field [Source MAC], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n-   check the hash values are the same as the first packet.\n+     check the hash values are the same as the first packet.\n \n 4. send packets mismatched the pattern, check the hash values not exist.\n \n@@ -3694,12 +2691,12 @@ Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n-----------------------------------------------------------\n+Subcase 2: MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -3711,9 +2708,9 @@ Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_DST_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -3724,18 +2721,16 @@ Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n \n        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\")\n \n-     change the fields [Dest IP][Source Port], send packets::\n+     change the field [Dest MAC], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n-   check the hash values are the same as the first packet.\n+     check the hash values are the same as the first packet.\n \n 4. send packets mismatched the pattern, check the hash values not exist.\n \n@@ -3747,12 +2742,12 @@ Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY\n-----------------------------------------------------------\n+Subcase 3: MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n+---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end\n \n    get the message::\n \n@@ -3764,9 +2759,9 @@ Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -3777,16 +2772,16 @@ Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY\n \n        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\")\n \n-     change the fields [Dest IP][Dest Port], send packets::\n+     change the fields [Source MAC][Dest MAC], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3800,12 +2795,12 @@ Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 12: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY\n-----------------------------------------------------------------------------------\n+Subcase 4: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -3817,9 +2812,9 @@ Subcase 12: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -3830,18 +2825,14 @@ Subcase 12: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n \n        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\")\n \n-     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::\n+     change the field [Source IP], send packets::\n \n        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\")\n-       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\")\n-       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\")\n-       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\")\n-       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3855,21 +2846,12 @@ Subcase 12: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_PPPOE_IPV6_TCP_PAY\n-=================================\n-\n-packets mismatched the pattern::\n-\n-  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\")\n-  sendp([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\")\n-  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\")\n-\n-Subcase 1: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY\n+Subcase 5: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY\n ---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -3881,27 +2863,27 @@ Subcase 1: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_TCP_PAY packet::\n+   * MAC_PPPOE_IPV6_UDP_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the field [Source MAC], send packets::\n+     change the field [Dest IP], send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3915,12 +2897,12 @@ Subcase 1: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 2: MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY\n+Subcase 6: MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY\n ---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY\n \n-     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\n+     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\n \n    get the message::\n \n@@ -3932,27 +2914,27 @@ Subcase 2: MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_SRC_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_TCP_PAY packet::\n+   * MAC_PPPOE_IPV6_UDP_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the field [Dest MAC], send packets::\n+     change the field [Source Port], send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -3966,12 +2948,12 @@ Subcase 2: MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 3: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n----------------------------------------------------------\n+Subcase 7: MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -3983,29 +2965,27 @@ Subcase 3: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_TCP_PAY packet::\n+   * MAC_PPPOE_IPV6_UDP_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the fields [Source MAC][Dest MAC], send packets::\n+     change the field [Dest Port], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -4019,12 +2999,12 @@ Subcase 3: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 4: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY\n----------------------------------------------\n+Subcase 8: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n+---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -4036,27 +3016,29 @@ Subcase 4: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_TCP_PAY packet::\n+   * MAC_PPPOE_IPV6_UDP_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the field [Source IP], send packets::\n+     change the fields [Source IP][Source Port], send packets::\n \n-       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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -4070,12 +3052,12 @@ Subcase 4: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 5: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY\n----------------------------------------------\n+Subcase 9: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n+---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -4087,29 +3069,31 @@ Subcase 5: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_TCP_PAY packet::\n+   * MAC_PPPOE_IPV6_UDP_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the field [Dest IP], send packets::\n+     change the fields [Source IP][Dest Port], send packets::\n \n-       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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n-     check the hash values are the same as the first packet.\n+   check the hash values are the same as the first packet.\n \n 4. send packets mismatched the pattern, check the hash values not exist.\n \n@@ -4121,12 +3105,12 @@ Subcase 5: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 6: MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY\n----------------------------------------------\n+Subcase 10: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n+----------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -4138,29 +3122,31 @@ Subcase 6: MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_TCP_PAY packet::\n+   * MAC_PPPOE_IPV6_UDP_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the field [Source Port], send packets::\n+     change the fields [Dest IP][Source Port], send packets::\n \n-       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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n-     check the hash values are the same as the first packet.\n+   check the hash values are the same as the first packet.\n \n 4. send packets mismatched the pattern, check the hash values not exist.\n \n@@ -4172,12 +3158,12 @@ Subcase 6: MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 7: MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY\n----------------------------------------------\n+Subcase 11: MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY\n+----------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -4189,27 +3175,29 @@ Subcase 7: MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_TCP_PAY packet::\n+   * MAC_PPPOE_IPV6_UDP_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the field [Dest Port], send packets::\n+     change the fields [Dest IP][Dest Port], send packets::\n \n-       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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -4223,12 +3211,12 @@ Subcase 7: MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 8: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n----------------------------------------------------------\n+Subcase 12: MAC_PPPOE_IPV6_UDP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY\n+----------------------------------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end\n \n    get the message::\n \n@@ -4240,29 +3228,31 @@ Subcase 8: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_PPPOE_IPV6_TCP_PAY packet::\n+   * MAC_PPPOE_IPV6_UDP_PAY packet::\n \n-       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\")\n+       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\")\n \n-     change the fields [Source IP][Source Port], send packets::\n+     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       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\")\n+       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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -4276,12 +3266,21 @@ Subcase 8: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n----------------------------------------------------------\n+Test case: MAC_PPPOE_IPV6_TCP_PAY\n+=================================\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n+packets mismatched the pattern::\n \n-     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\n+  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\")\n+  sendp([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\")\n+  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\")\n+\n+Subcase 1: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY\n+---------------------------------------------\n+\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::\n+\n+     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\n \n    get the message::\n \n@@ -4293,9 +3292,9 @@ Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -4306,16 +3305,14 @@ Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n \n        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\")\n \n-     change the fields [Source IP][Dest Port], send packets::\n+     change the field [Source MAC], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -4329,12 +3326,12 @@ Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n-----------------------------------------------------------\n+Subcase 2: MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::\n \n-     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\n+     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\n \n    get the message::\n \n@@ -4346,9 +3343,9 @@ Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_DST_ONLY::\n \n-     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\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -4359,16 +3356,14 @@ Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n \n        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\")\n \n-     change the fields [Dest IP][Source Port], send packets::\n+     change the field [Dest MAC], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -4382,12 +3377,12 @@ Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY\n-----------------------------------------------------------\n+Subcase 3: MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n+---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     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\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth end key_len 0 queues end / end\n \n    get the message::\n \n@@ -4399,9 +3394,9 @@ Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n \n-     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\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types eth end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -4412,16 +3407,16 @@ Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY\n \n        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\")\n \n-     change the fields [Dest IP][Dest Port], send packets::\n+     change the fields [Source MAC][Dest MAC], send packets::\n \n-       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\")\n-       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\")\n-       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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -4435,12 +3430,12 @@ Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Subcase 12: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY\n-----------------------------------------------------------------------------------\n+Subcase 4: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -4452,9 +3447,9 @@ Subcase 12: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n@@ -4465,18 +3460,14 @@ Subcase 12: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n \n        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\")\n \n-     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::\n+     change the field [Source IP], send packets::\n \n        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\")\n-       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\")\n-       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\")\n-       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\")\n-       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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\")\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n@@ -4490,12 +3481,12 @@ Subcase 12: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ON\n    check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_VLAN_IPV4_PAY\n-============================\n+Subcase 5: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_VLAN_IPV4_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -4507,50 +3498,46 @@ Test case: MAC_VLAN_IPV4_PAY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_VLAN_IPV4_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_VLAN_IPV4_PAY packet::\n+   * MAC_PPPOE_IPV6_TCP_PAY packet::\n \n-       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)\n+       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\")\n \n-     change the field [VLAN ID], send packets::\n+     change the field [Dest IP], send packets::\n \n-       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)\n+       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\")\n \n-     check the hash value is different from the first packet.\n+     check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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)\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern::\n-\n-     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)\n-\n-  check the hash values not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n      testpmd> flow destroy 0 rule 0\n      testpmd> flow list 0\n \n-   check the rule not exists.\n+   check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_VLAN_IPV4_UDP_PAY\n-================================\n+Subcase 6: MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_VLAN_IPV4_UDP_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / udp / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -4562,51 +3549,46 @@ Test case: MAC_VLAN_IPV4_UDP_PAY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_VLAN_IPV4_UDP_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / udp / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_VLAN_IPV4_UDP_PAY packet::\n+   * MAC_PPPOE_IPV6_TCP_PAY packet::\n \n-       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)\n+       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\")\n \n-     change the field [VLAN ID], send packets::\n+     change the field [Source Port], send packets::\n \n-       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)\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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)\n-\n-     check the hash values are the same as as the first packet.\n-\n-4. send packets mismatched the pattern::\n+       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\")\n \n-     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)\n-     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)\n+     check the hash values are the same as the first packet.\n \n-   check the hash values of the packets not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n      testpmd> flow destroy 0 rule 0\n      testpmd> flow list 0\n \n-   check the rule not exists.\n+   check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_VLAN_IPV4_TCP_PAY\n-================================\n+Subcase 7: MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY\n+---------------------------------------------\n \n-1. validate a rule for RSS type of MAC_VLAN_IPV4_TCP_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / tcp / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -4618,51 +3600,46 @@ Test case: MAC_VLAN_IPV4_TCP_PAY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_VLAN_IPV4_TCP_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / tcp / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_VLAN_IPV4_TCP_PAY packet::\n+   * MAC_PPPOE_IPV6_TCP_PAY packet::\n \n-       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)\n+       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\")\n \n-     change the field [VLAN ID], send packets::\n+     change the field [Dest Port], send packets::\n \n-       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)\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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)\n-\n-     check the hash values are the same as as the first packet.\n-\n-4. send packets mismatched the pattern::\n+       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\")\n \n-     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)\n-     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)\n+     check the hash values are the same as the first packet.\n \n-   check the hash values of the packets not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n      testpmd> flow destroy 0 rule 0\n      testpmd> flow list 0\n \n-   check the rule not exists.\n+   check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_VLAN_IPV4_SCTP_PAY\n-=================================\n+Subcase 8: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n+---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_VLAN_IPV4_SCTP_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv4 / sctp / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -4674,51 +3651,48 @@ Test case: MAC_VLAN_IPV4_SCTP_PAY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_VLAN_IPV4_SCTP_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / vlan / ipv4 / sctp / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_VLAN_IPV4_SCTP_PAY packet::\n+   * MAC_PPPOE_IPV6_TCP_PAY packet::\n \n-       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)\n+       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\")\n \n-     change the field [VLAN ID], send packets::\n+     change the fields [Source IP][Source Port], send packets::\n \n-       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)\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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)\n-\n-     check the hash values are the same as as the first packet.\n-\n-4. send packets mismatched the pattern::\n+       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\")\n \n-     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)\n-     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)\n+     check the hash values are the same as the first packet.\n \n-   check the hash values of the packets not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n      testpmd> flow destroy 0 rule 0\n      testpmd> flow list 0\n \n-   check the rule not exists.\n+   check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_VLAN_IPV6_PAY\n-============================\n+Subcase 9: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY\n+---------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_VLAN_IPV6_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -4730,50 +3704,48 @@ Test case: MAC_VLAN_IPV6_PAY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_VLAN_IPV6_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_VLAN_IPV6_PAY packet::\n+   * MAC_PPPOE_IPV6_TCP_PAY packet::\n \n-       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)\n+       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\")\n \n-     change the field [VLAN ID], send packets::\n+     change the fields [Source IP][Dest Port], send packets::\n \n-       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)\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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)\n-\n-   check the hash values are the same as the first packet.\n-\n-4. send packets mismatched the pattern::\n+       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\")\n \n-     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)\n+     check the hash values are the same as the first packet.\n \n-  check the hash values not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n      testpmd> flow destroy 0 rule 0\n      testpmd> flow list 0\n \n-   check the rule not exists.\n+   check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_VLAN_IPV6_UDP_PAY\n-================================\n+Subcase 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n+----------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_VLAN_IPV6_UDP_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / udp / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -4785,51 +3757,48 @@ Test case: MAC_VLAN_IPV6_UDP_PAY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_VLAN_IPV6_UDP_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / udp / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_VLAN_IPV6_UDP_PAY packet::\n+   * MAC_PPPOE_IPV6_TCP_PAY packet::\n \n-       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)\n+       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\")\n \n-     change the field [VLAN ID], send packets::\n+     change the fields [Dest IP][Source Port], send packets::\n \n-       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)\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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)\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern::\n-\n-     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)\n-     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)\n-\n-  check the hash values not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n      testpmd> flow destroy 0 rule 0\n      testpmd> flow list 0\n \n-   check the rule not exists.\n+   check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_VLAN_IPV6_TCP_PAY\n-================================\n+Subcase 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY\n+----------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_VLAN_IPV6_TCP_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n \n-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / tcp / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n \n    get the message::\n \n@@ -4841,51 +3810,48 @@ Test case: MAC_VLAN_IPV6_TCP_PAY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_VLAN_IPV6_TCP_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_DST_ONLY::\n \n-     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / tcp / end actions rss types c-vlan end key_len 0 queues end / end\n+     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\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_VLAN_IPV6_TCP_PAY packet::\n+   * MAC_PPPOE_IPV6_TCP_PAY packet::\n \n-       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)\n+       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\")\n \n-     change the field [VLAN ID], send packets::\n+     change the fields [Dest IP][Dest Port], send packets::\n \n-       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)\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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)\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern::\n-\n-     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)\n-     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)\n-\n-  check the hash values not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n      testpmd> flow destroy 0 rule 0\n      testpmd> flow list 0\n \n-   check the rule not exists.\n+   check the rule not exists in the list.\n    send the matched packets, check the hash values of the packets are not exist.\n \n-Test case: MAC_VLAN_IPV6_SCTP_PAY\n-=================================\n+Subcase 12: MAC_PPPOE_IPV6_TCP_PAY_L3_SRC_ONLY_L3_DST_ONLY_L4_SRC_ONLY_L4_DST_ONLY\n+----------------------------------------------------------------------------------\n \n-1. validate a rule for RSS type of MAC_VLAN_IPV6_SCTP_PAY::\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::\n \n-     testpmd> flow validate 0 ingress pattern eth / vlan / ipv6 / sctp / end actions rss types c-vlan end key_len 0 queues end / end\n+     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end\n \n    get the message::\n \n@@ -4897,44 +3863,43 @@ Test case: MAC_VLAN_IPV6_SCTP_PAY\n \n    check the rule not exists in the list.\n \n-2. create a rule for RSS type of MAC_VLAN_IPV6_SCTP_PAY::\n+2. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY::\n \n-     testpmd> flow create 0 ingress pattern eth / vlan / ipv6 / sctp / end actions rss types c-vlan end key_len 0 queues end / end\n+     testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end\n      testpmd> flow list 0\n \n    check the rule exists in the list.\n \n 3. send matched packets\n \n-   * MAC_VLAN_IPV6_SCTP_PAY packet::\n+   * MAC_PPPOE_IPV6_TCP_PAY packet::\n \n-       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)\n+       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\")\n \n-     change the field [VLAN ID], send packets::\n+     change the fields [Source IP][Dest IP][Source Port][Dest Port], send packets::\n \n-       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)\n+       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\")\n+       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\")\n+       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\")\n+       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\")\n+       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\")\n \n      check the hash values are different from the first packet.\n      change other fields, send packets::\n \n-       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)\n+       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\")\n \n      check the hash values are the same as the first packet.\n \n-4. send packets mismatched the pattern::\n-\n-     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)\n-     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)\n-\n-  check the hash values not exist.\n+4. send packets mismatched the pattern, check the hash values not exist.\n \n 5. destroy the rule::\n \n      testpmd> flow destroy 0 rule 0\n      testpmd> flow list 0\n \n-   check the rule not exists.\n-   send the matched packets, check the hash values the packets are not exist.\n+   check the rule not exists in the list.\n+   send the matched packets, check the hash values of the packets are not exist.\n \n Test case: MAC_VLAN_PPPOE_PAY (not supported in 20.08)\n ======================================================\n@@ -6017,161 +4982,3 @@ Subcase 4: two rules, scope larger created first, and the smaller one created la\n \n    send a MAC_PPPOE_IPV4_UDP_PAY packet, check the hash values not exists.\n \n-Test case: negative cases\n-=========================\n-\n-Subcase 1: wrong hash input set\n--------------------------------\n-\n-1. validate a rule with wrong input set::\n-\n-     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\n-\n-   get the error message::\n-\n-     Invalid input set: Invalid argument\n-\n-   create a rule with wrong hash input set::\n-\n-     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\n-\n-   Failed to create flow, report error message::\n-\n-     Invalid input set: Invalid argument\n-\n-2. validate a rule with wrong hash type::\n-\n-     testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end\n-\n-   get the error message::\n-\n-     Invalid input set: Invalid argument\n-\n-   create a rule with wrong hash type::\n-\n-     testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end\n-\n-   Failed to create flow, report error message::\n-\n-     Invalid input set: Invalid argument\n-\n-3. validate a rule with wrong symmetric hash input set::\n-\n-     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\n-\n-   get the error message::\n-\n-     Invalid input set: Invalid argument\n-\n-   create a rule with wrong symmetric hash input set::\n-\n-     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\n-\n-   Failed to create flow, report error message::\n-\n-     Invalid input set: Invalid argument\n-\n-4. check the rule list::\n-\n-     testpmd> flow list 0\n-\n-  there is no listed.\n-\n-Subcase 2: void action\n-----------------------\n-\n-1. validate a rule with void action::\n-\n-     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / pfcp / end actions end\n-\n-   get the error message::\n-\n-     NULL action.: Invalid argument\n-\n-   create a rule with void action::\n-\n-     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions end\n-\n-   Failed to create flow, report message::\n-\n-     NULL action.: Invalid argument\n-\n-2. check the rule list::\n-\n-     testpmd> flow list 0\n-\n-   there is no rule listed.\n-\n-Subcase 3: delete a non-existing rule\n--------------------------------------\n-\n-1. show the rule list of port 0::\n-\n-     testpmd> flow list 0\n-\n-   There is no rule listed.\n-\n-2. destroy rule 0 of port 0::\n-\n-     testpmd> flow destroy 0 rule 0\n-\n-   There is no error message reported.\n-\n-3. flush rules of port 0::\n-\n-     testpmd> flow flush 0\n-\n-   There is no error message reported.\n-\n-Subcase 4: unsupported pattern with OS default package\n-------------------------------------------------------\n-\n-1. load os default package and launch testpmd as step 3-5 in Prerequisites.\n-\n-2. validate unsupported patterns in OS default package::\n-\n-     testpmd> flow validate 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end\n-     testpmd> flow validate 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end\n-     testpmd> flow validate 0 ingress pattern eth / ipv4 / esp / end actions rss types esp end key_len 0 queues end / end\n-     testpmd> flow validate 0 ingress pattern eth / ipv4 / ah / end actions rss types ah end key_len 0 queues end / end\n-\n-   get the error message::\n-\n-     Invalid input pattern: Invalid argument\n-\n-3. create unsupported patterns in OS default package::\n-\n-     testpmd> flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end\n-     testpmd> flow create 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end\n-     testpmd> flow create 0 ingress pattern eth / ipv4 / esp / end actions rss types esp end key_len 0 queues end / end\n-     testpmd> flow create 0 ingress pattern eth / ipv4 / ah / end actions rss types ah end key_len 0 queues end / end\n-\n-4. check the rule list::\n-\n-     testpmd> flow list 0\n-\n-   there is no rule listed.\n-\n-Subcase 5: invalid port\n------------------------\n-\n-1. create a rule with invalid port::\n-\n-     testpmd> flow create 1 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end\n-\n-   Failed to create flow, report message::\n-\n-    No such device: No such device\n-\n-2. check the rule list on port 0::\n-\n-     testpmd> flow list 0\n-\n-   there is no rule listed.\n-   check on port 1::\n-\n-     testpmd> flow list 1\n-\n-   get the error message::\n-\n-     Invalid port 1\n",
    "prefixes": [
        "v2"
    ]
}