Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/75971/?format=api
https://patches.dpdk.org/api/patches/75971/?format=api", "web_url": "https://patches.dpdk.org/project/dts/patch/1598457930-768644-1-git-send-email-nannan.lu@intel.com/", "project": { "id": 3, "url": "https://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": "<1598457930-768644-1-git-send-email-nannan.lu@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dts/1598457930-768644-1-git-send-email-nannan.lu@intel.com", "date": "2020-08-26T16:05:30", "name": "[V1] test_plans: add cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "683919235e0f30250545c0fac216c8c46ac74f21", "submitter": { "id": 1658, "url": "https://patches.dpdk.org/api/people/1658/?format=api", "name": "Lu, Nannan", "email": "nannan.lu@intel.com" }, "delegate": null, "mbox": "https://patches.dpdk.org/project/dts/patch/1598457930-768644-1-git-send-email-nannan.lu@intel.com/mbox/", "series": [ { "id": 11794, "url": "https://patches.dpdk.org/api/series/11794/?format=api", "web_url": "https://patches.dpdk.org/project/dts/list/?series=11794", "date": "2020-08-26T16:05:30", "name": "[V1] test_plans: add cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst", "version": 1, "mbox": "https://patches.dpdk.org/series/11794/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/75971/comments/", "check": "pending", "checks": "https://patches.dpdk.org/api/patches/75971/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 56E52A04B1;\n\tWed, 26 Aug 2020 09:15:10 +0200 (CEST)", "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id B3BC31C0AC;\n\tWed, 26 Aug 2020 09:15:09 +0200 (CEST)", "from mga05.intel.com (mga05.intel.com [192.55.52.43])\n by dpdk.org (Postfix) with ESMTP id 0DA5C1C08E\n for <dts@dpdk.org>; Wed, 26 Aug 2020 09:15:05 +0200 (CEST)", "from fmsmga008.fm.intel.com ([10.253.24.58])\n by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 26 Aug 2020 00:15:03 -0700", "from dpdk-lunannan.sh.intel.com ([10.67.111.68])\n by fmsmga008.fm.intel.com with ESMTP; 26 Aug 2020 00:15:02 -0700" ], "IronPort-SDR": [ "\n lBLtYRcaqlt5QtBWBUpVrUPFLap5RpR9I5yYRUyDOROgrn823j8EkPBBbP6dza83mNX6ZD+IXr\n 1ETMxxBC0dFg==", "\n SCCqaMuHD5sfI1rsIC64FLvBVAm5ngGFt9rOZYRasrK7aavuS9SHIzpr9lARCtQuVQa1rblQH2\n f3lUx924xp9A==" ], "X-IronPort-AV": [ "E=McAfee;i=\"6000,8403,9724\"; a=\"241062524\"", "E=Sophos;i=\"5.76,354,1592895600\"; d=\"scan'208\";a=\"241062524\"", "E=Sophos;i=\"5.76,354,1592895600\"; d=\"scan'208\";a=\"281722801\"" ], "X-Amp-Result": "SKIPPED(no attachment in message)", "X-Amp-File-Uploaded": "False", "X-ExtLoop1": "1", "From": "Nannan Lu <nannan.lu@intel.com>", "To": "dts@dpdk.org", "Cc": "Nannan Lu <nannan.lu@intel.com>", "Date": "Wed, 26 Aug 2020 16:05:30 +0000", "Message-Id": "<1598457930-768644-1-git-send-email-nannan.lu@intel.com>", "X-Mailer": "git-send-email 2.7.4", "Subject": "[dts] [PATCH V1] test_plans: add\n\tcvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst", "X-BeenThere": "dts@dpdk.org", "X-Mailman-Version": "2.1.15", "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": "Enable RSS for PPPOE/VLAN/ESP/AH/L2TP/PFCP packets.\nSymmetric hash for PPPOE packets.\nSimple_xor hash for PPPOE packets.\n\nSigned-off-by: Nannan Lu <nannan.lu@intel.com>\n---\n ...d_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst | 6139 ++++++++++++++++++++\n 1 file changed, 6139 insertions(+)\n create mode 100644 test_plans/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst", "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_vlan_esp_ah_l2tp_pfcp_test_plan.rst\nnew file mode 100644\nindex 0000000..c28f37b\n--- /dev/null\n+++ b/test_plans/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp_test_plan.rst\n@@ -0,0 +1,6139 @@\n+.. Copyright (c) <2020>, Intel Corporation\n+ All rights reserved.\n+\n+ Redistribution and use in source and binary forms, with or without\n+ modification, are permitted provided that the following conditions\n+ are met:\n+\n+ - Redistributions of source code must retain the above copyright\n+ notice, this list of conditions and the following disclaimer.\n+\n+ - Redistributions in binary form must reproduce the above copyright\n+ notice, this list of conditions and the following disclaimer in\n+ the documentation and/or other materials provided with the\n+ distribution.\n+\n+ - Neither the name of Intel Corporation nor the names of its\n+ contributors may be used to endorse or promote products derived\n+ from this software without specific prior written permission.\n+\n+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\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+Description\n+===========\n+\n+* Enable RSS for PPPOE/VLAN/ESP/AH/L2TP/PFCP packets.\n+* Symmetric hash for PPPOE packets.\n+* Simple_xor hash for PPPOE packets.\n+\n+Pattern and input set\n+---------------------\n+.. table::\n+\n+ +-------------------------------+---------------------------+----------------------------------------------------------------------------------+\n+ | Hash function: toeplitz |\n+ +-------------------------------+---------------------------+----------------------------------------------------------------------------------+\n+ | Packet Type | Pattern | All the Input Set options in combination |\n+ +===============================+===========================+==================================================================================+\n+ | | MAC_PPPOE_IPV4_PAY | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only, ipv4 |\n+ | +---------------------------+----------------------------------------------------------------------------------+\n+ | | MAC_PPPOE_IPV4_UDP_PAY | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only, |\n+ | | | l4-src-only, l4-dst-only, ipv4-udp |\n+ | +---------------------------+----------------------------------------------------------------------------------+\n+ | | MAC_PPPOE_IPV4_TCP_PAY | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only, |\n+ | | | l4-src-only, l4-dst-only, ipv4-tcp |\n+ | PPPOE +---------------------------+----------------------------------------------------------------------------------+\n+ | | MAC_PPPOE_IPV6_PAY | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only, ipv6 |\n+ | +---------------------------+----------------------------------------------------------------------------------+\n+ | | MAC_PPPOE_IPV6_UDP_PAY | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only, |\n+ | | | l4-src-only, l4-dst-only, ipv6-udp |\n+ | +---------------------------+----------------------------------------------------------------------------------+\n+ | | MAC_PPPOE_IPV6_TCP_PAY | eth, l2-src-only, l2-dst-only, l3-src-only, l3-dst-only, |\n+ | | | l4-src-only, l4-dst-only, ipv6-tcp |\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+ The MAC_PPPOE_IPV4/IPV6_SCTP and MAC_VLAN_PPPOE patterns are not\n+ supported by 20.08.\n+\n+.. table::\n+\n+ +-------------------------------+---------------------------+-------------------+\n+ | Hash function: Symmetric_toeplitz |\n+ +-------------------------------+---------------------------+-------------------+\n+ | Packet Type | Pattern | Input Set |\n+ +===============================+===========================+===================+\n+ | | MAC_PPPOE_IPV4_PAY | ipv4 |\n+ | +---------------------------+-------------------+\n+ | | MAC_PPPOE_IPV4_UDP_PAY | ipv4-udp |\n+ | +---------------------------+-------------------+\n+ | PPPOE | MAC_PPPOE_IPV4_TCP_PAY | ipv4-tcp |\n+ | +---------------------------+-------------------+\n+ | | MAC_PPPOE_IPV6_PAY | ipv6 |\n+ | +---------------------------+-------------------+\n+ | | MAC_PPPOE_IPV6_UDP_PAY | ipv6-udp |\n+ | +---------------------------+-------------------+\n+ | | MAC_PPPOE_IPV6_TCP_PAY | ipv6-tcp |\n+ +-------------------------------+---------------------------+-------------------+\n+\n+Prerequisites\n+=============\n+\n+1. Hardware:\n+\n+ - Intel E810 series ethernet cards: columbiaville_25g/columbiaville_100g\n+\n+2. Software:\n+\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+\n+ rmmod ice\n+ insmod ice.ko\n+\n+4. Bind pf to dpdk driver::\n+\n+ ./usertools/dpdk-devbind.py -b vfio-pci 0000:18:00.0\n+\n+5. Launch the testpmd in DUT for cases with toeplitz hash function::\n+\n+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 -w 0000:18:00.0 -- -i --rxq=16 --txq=16 --disable-rss\n+ testpmd> port config 0 rss-hash-key ipv4 1b9d58a4b961d9cd1c56ad1621c3ad51632c16a5d16c21c3513d132c135d132c13ad1531c23a51d6ac49879c499d798a7d949c8a\n+ testpmd> set fwd rxonly\n+ testpmd> set verbose 1\n+ testpmd> start\n+\n+ Launch testpmd for cases with symmetric_toeplitz and simple_xor hash function::\n+\n+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 -w 0000:18:00.0 -- -i --rxq=16 --txq=16\n+\n+6. on tester side, copy the layer python file to /root::\n+\n+ cp pfcp.py to /root\n+\n+ then import layers when start scapy::\n+\n+ >>> import sys\n+ >>> sys.path.append('/root')\n+ >>> from pfcp import PFCP\n+\n+Test case: MAC_IPV4_PFCP_SESSION\n+================================\n+\n+1. validate a rule for RSS type of MAC_IPV4_PFCP_SESSION::\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+\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_IPV4_PFCP_SESSION::\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 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+\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+\n+ change the field [SEID], 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+\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+\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+\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_PFCP_SESSION::\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+\n+ check the rule exists in the list.\n+\n+3. send matched packets\n+\n+ * MAC_IPV6_PFCP_SESSION 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+\n+ change the field [SEID], 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+\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+\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+\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_IPV4_L2TPv3\n+==========================\n+\n+1. validate a rule for RSS type of MAC_IPV4_L2TPv3::\n+\n+ testpmd> flow validate 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 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_IPV4_L2TPv3::\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 list 0\n+\n+ check the rule exists in the list.\n+\n+3. send matched packets\n+\n+ * MAC_IPV4_L2TPv3 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+\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.4\", proto=115)/L2TP('\\x00\\x00\\x00\\x12')/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\")/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+\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+\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_L2TPv3\n+==========================\n+\n+1. validate a rule for RSS type of MAC_IPV6_L2TPv3::\n+\n+ testpmd> flow validate 0 ingress pattern eth / ipv6 / l2tpv3oip / end actions rss types l2tpv3 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_L2TPv3::\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 list 0\n+\n+ check the rule exists in the list.\n+\n+3. send matched packets\n+\n+ * MAC_IPV6_L2TPv3 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+\n+ change the field [session_id], 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=115)/L2TP('\\x00\\x00\\x00\\x12')/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=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+\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+\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_IPV4_ESP\n+=======================\n+\n+1. validate a rule for RSS type of MAC_IPV4_ESP::\n+\n+ testpmd> flow validate 0 ingress pattern eth / ipv4 / esp / end actions rss types esp 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_IPV4_ESP::\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 list 0\n+\n+ check the rule exists in the list\n+\n+3. send matched packets\n+\n+ * MAC_IPV4_ESP 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+\n+ change the field [spi], 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+\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+\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\", nh=50)/ESP(spi=12)/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_IPV4_UDP_ESP\n+===========================\n+\n+1. validate a rule for RSS type of MAC_IPV4_UDP_ESP::\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+\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_IPV4_UDP_ESP::\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 list 0\n+\n+ check the rule exists in the list\n+\n+3. send matched packets\n+\n+ * MAC_IPV4_UDP_ESP 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+\n+ change the field [spi], 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+\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\")/UDP(dport=4500)/ESP(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\")/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+\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_ESP\n+=======================\n+\n+1. validate a rule for RSS type of MAC_IPV6_ESP::\n+\n+ testpmd> flow validate 0 ingress pattern eth / ipv6 / esp / end actions rss types esp 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_ESP::\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 list 0\n+\n+ check the rule exists in the list\n+\n+3. send matched packets\n+\n+ * MAC_IPV6_ESP 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+\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=50)/ESP(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=50)/ESP(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=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+\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_UDP_ESP\n+===========================\n+\n+1. validate a rule for RSS type of MAC_IPV6_UDP_ESP::\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+\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_UDP_ESP::\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 list 0\n+\n+ check the rule exists in the list\n+\n+3. send matched packets\n+\n+ * MAC_IPV6_UDP_ESP 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+\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\")/UDP(dport=4500)/ESP(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\")/UDP(dport=4500)/ESP(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\")/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+\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_IPV4_AH\n+======================\n+\n+1. validate a rule for RSS type of MAC_IPV4_AH::\n+\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 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_IPV4_AH::\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 list 0\n+\n+ check the rule exists in the list.\n+\n+3. send matched packets\n+\n+ * MAC_IPV4_AH 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+\n+ change the field [spi], 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=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\")/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+\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 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+\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+\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_UDP_PAY_L3_SRC_ONLY\n+---------------------------------------------\n+\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 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_UDP_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 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 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+\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+\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_UDP_PAY_L3_DST_ONLY\n+---------------------------------------------\n+\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-udp 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_UDP_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 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 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+\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+\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+\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+\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: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+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 7: MAC_PPPOE_IPV4_UDP_PAY_L4_DST_ONLY\n+---------------------------------------------\n+\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 / udp / end actions rss types ipv4-udp l4-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_L4_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 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 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\")/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\")/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+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+\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+\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: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+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 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_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\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+\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_DST_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 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 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\")/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\")/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+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 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_UDP_PAY_L3_DST_ONLY_L4_SRC_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+\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_DST_ONLY_L4_SRC_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 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 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+\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+\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 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_UDP_PAY_L3_DST_ONLY_L4_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+\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_DST_ONLY_L4_SRC_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 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 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.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.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+\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 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_UDP_PAY::\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+\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::\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 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 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.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+\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_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+---------------------------------------------\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+ 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_TCP_PAY_L2_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 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+\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+\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: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+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_TCP_PAY_L2_DST_ONLY\n+---------------------------------------------\n+\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 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_TCP_PAY_L2_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 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+\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+\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: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+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_TCP_PAY_L2_SRC_ONLY_L2_DST_ONLY\n+---------------------------------------------------------\n+\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 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_TCP_PAY_L2_SRC_ONLY_L2_DST_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 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+\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 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\")/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: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+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_TCP_PAY_L3_SRC_ONLY\n+---------------------------------------------\n+\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 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_TCP_PAY_L3_SRC_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 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+\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+\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+\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+\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_TCP_PAY_L3_DST_ONLY\n+---------------------------------------------\n+\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 / 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+ 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_TCP_PAY_L3_DST_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 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+\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], 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+\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+\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_TCP_PAY_L4_SRC_ONLY\n+---------------------------------------------\n+\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 / 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+ 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_TCP_PAY_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 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+\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 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+\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+\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 7: MAC_PPPOE_IPV4_TCP_PAY_L4_DST_ONLY\n+---------------------------------------------\n+\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 / 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+ 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_TCP_PAY_L4_DST_ONLY::\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 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+\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 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+\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+\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_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n+---------------------------------------------------------\n+\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 / 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+ 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_TCP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\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 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+\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][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.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 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+\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 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_IPV4_TCP_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 l4-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_TCP_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 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+\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+\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=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+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 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_IPV4_TCP_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 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_TCP_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 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+\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+\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=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+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 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_IPV4_TCP_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 l3-dst-only l4-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_TCP_PAY_L3_DST_ONLY_L4_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 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+\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+\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: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+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 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_IPV4_TCP_PAY::\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+\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_TCP_PAY::\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 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+\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+\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+\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_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+\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+ 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_IPV6_PAY_L2_SRC_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 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+\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+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_IPV6_PAY_L2_DST_ONLY\n+-----------------------------------------\n+\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 / 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_IPV6_PAY_L2_DST_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 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+\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+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_IPV6_PAY_L2_SRC_ONLY_L2_DST_ONLY\n+-----------------------------------------------------\n+\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+ 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_IPV6_PAY_L2_SRC_ONLY_L2_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 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+\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+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_IPV6_PAY_L3_SRC_ONLY\n+-----------------------------------------\n+\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 / end actions rss types ipv6 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_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+\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\")/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+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_IPV6_PAY_L3_DST_ONLY\n+-----------------------------------------\n+\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 / end actions rss types ipv6 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_IPV6_PAY_L3_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 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+\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+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_IPV6_PAY_L3_SRC_ONLY_L3_DST_ONLY\n+-----------------------------------------------------\n+\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY::\n+\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+ 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_IPV6_PAY::\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 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+\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+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_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+\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+ 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_IPV6_UDP_PAY_L2_SRC_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 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+\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+\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: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+\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_IPV6_UDP_PAY_L2_DST_ONLY\n+---------------------------------------------\n+\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 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_IPV6_UDP_PAY_L2_DST_ONLY::\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 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+\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+\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: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+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_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_L2_SRC_ONLY_L2_DST_ONLY::\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+\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_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 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+\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+\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: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+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_IPV6_UDP_PAY_L3_SRC_ONLY\n+---------------------------------------------\n+\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 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_IPV6_UDP_PAY_L3_SRC_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 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+\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+\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+\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=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 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+\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+ 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_IPV6_UDP_PAY_L3_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 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+\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+\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: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+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_IPV6_UDP_PAY_L4_SRC_ONLY\n+---------------------------------------------\n+\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 / udp / end actions rss types ipv6-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_IPV6_UDP_PAY_L4_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 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+\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+\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: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+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 7: MAC_PPPOE_IPV6_UDP_PAY_L4_DST_ONLY\n+---------------------------------------------\n+\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 / udp / end actions rss types ipv6-udp l4-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_IPV6_UDP_PAY_L4_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 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+\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+\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: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+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_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY\n+---------------------------------------------------------\n+\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 / 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+ 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_IPV6_UDP_PAY_L3_SRC_ONLY_L4_SRC_ONLY::\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 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+\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+\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\")/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+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 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_UDP_PAY_L3_SRC_ONLY_L4_DST_ONLY::\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+\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_IPV6_UDP_PAY_L3_SRC_ONLY_L4_DST_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 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+\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+\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: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+\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 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_UDP_PAY_L3_DST_ONLY_L4_SRC_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+\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_IPV6_UDP_PAY_L3_DST_ONLY_L4_SRC_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 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+\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+\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: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+\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 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_UDP_PAY_L3_DST_ONLY_L4_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+\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_IPV6_UDP_PAY_L3_DST_ONLY_L4_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 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+\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+\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: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+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 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_UDP_PAY::\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+\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_IPV6_UDP_PAY::\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 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+\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+\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+\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_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+---------------------------------------------\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+ 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_IPV6_TCP_PAY_L2_SRC_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 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+\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 [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\")/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: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+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_IPV6_TCP_PAY_L2_DST_ONLY\n+---------------------------------------------\n+\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 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_IPV6_TCP_PAY_L2_DST_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 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+\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 [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\")/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: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+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_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_L2_SRC_ONLY_L2_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+\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_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 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_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\")/TCP(sport=25,dport=23)/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=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: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+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_IPV6_TCP_PAY_L3_SRC_ONLY\n+---------------------------------------------\n+\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 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_IPV6_TCP_PAY_L3_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 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+\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 [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+\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+\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_IPV6_TCP_PAY_L3_DST_ONLY\n+---------------------------------------------\n+\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 / 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+ 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_IPV6_TCP_PAY_L3_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 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+\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 [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\")/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=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 6: MAC_PPPOE_IPV6_TCP_PAY_L4_SRC_ONLY\n+---------------------------------------------\n+\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 / 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+ 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_IPV6_TCP_PAY_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 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+\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 [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+\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+\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 7: MAC_PPPOE_IPV6_TCP_PAY_L4_DST_ONLY\n+---------------------------------------------\n+\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 / 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+ 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_IPV6_TCP_PAY_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 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+\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 [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+\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+\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_IPV6_TCP_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_L4_SRC_ONLY::\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+\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_IPV6_TCP_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 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+\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][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: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=\"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+ 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 9: MAC_PPPOE_IPV6_TCP_PAY_L3_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_DST_ONLY::\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+\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_IPV6_TCP_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-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+\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+\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=\"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+ 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 10: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_SRC_ONLY\n+----------------------------------------------------------\n+\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 / 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+ 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_IPV6_TCP_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 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+\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+\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=\"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, 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 11: MAC_PPPOE_IPV6_TCP_PAY_L3_DST_ONLY_L4_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+\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+ 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_IPV6_TCP_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 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+\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+\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=\"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, 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 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_PPPOE_IPV6_TCP_PAY::\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+\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_IPV6_TCP_PAY::\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 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+\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+\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+\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_VLAN_IPV4_PAY\n+============================\n+\n+1. validate a rule for RSS type of MAC_VLAN_IPV4_PAY::\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+\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_VLAN_IPV4_PAY::\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 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+\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+\n+ change the field [VLAN ID], 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+\n+ check the hash value is 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+\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+\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 of the packets are not exist.\n+\n+Test case: MAC_VLAN_IPV4_UDP_PAY\n+================================\n+\n+1. validate a rule for RSS type of MAC_VLAN_IPV4_UDP_PAY::\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+\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_VLAN_IPV4_UDP_PAY::\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 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+\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+\n+ change the field [VLAN ID], 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+\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+\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 of the packets 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 of the packets are not exist.\n+\n+Test case: MAC_VLAN_IPV4_TCP_PAY\n+================================\n+\n+1. validate a rule for RSS type of MAC_VLAN_IPV4_TCP_PAY::\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+\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_VLAN_IPV4_TCP_PAY::\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 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+\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+\n+ change the field [VLAN ID], 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+\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+\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 of the packets 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 of the packets are not exist.\n+\n+Test case: MAC_VLAN_IPV4_SCTP_PAY\n+=================================\n+\n+1. validate a rule for RSS type of MAC_VLAN_IPV4_SCTP_PAY::\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+\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_VLAN_IPV4_SCTP_PAY::\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 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+\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+\n+ change the field [VLAN ID], 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+\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+\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+\n+ check the hash values of the packets 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 of the packets are not exist.\n+\n+Test case: MAC_VLAN_IPV6_PAY\n+============================\n+\n+1. validate a rule for RSS type of MAC_VLAN_IPV6_PAY::\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+\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_VLAN_IPV6_PAY::\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 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+\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+ change the field [VLAN ID], 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+\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+\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+\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.\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+\n+1. validate a rule for RSS type of MAC_VLAN_IPV6_UDP_PAY::\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+\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_VLAN_IPV6_UDP_PAY::\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 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+\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+ change the field [VLAN ID], 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+\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+\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+\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 of the packets are not exist.\n+\n+Test case: MAC_VLAN_IPV6_TCP_PAY\n+================================\n+\n+1. validate a rule for RSS type of MAC_VLAN_IPV6_TCP_PAY::\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+\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_VLAN_IPV6_TCP_PAY::\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 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+\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+ change the field [VLAN ID], 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+\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+\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+\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 of the packets are not exist.\n+\n+Test case: MAC_VLAN_IPV6_SCTP_PAY\n+=================================\n+\n+1. validate a rule for RSS type of MAC_VLAN_IPV6_SCTP_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+\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_VLAN_IPV6_SCTP_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 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+\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+\n+ change the field [VLAN ID], 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+\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+\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+\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+\n+Test case: MAC_VLAN_PPPOE_PAY (not supported in 20.08)\n+======================================================\n+\n+Subcase 1: MAC_VLAN_PPPOE_PAY_L2_SRC_ONLY\n+-----------------------------------------\n+\n+1. validate a rule for RSS type of MAC_VLAN_PPPOE_PAY_L2_SRC_ONLY::\n+\n+ testpmd> flow validate 0 ingress pattern eth / vlan / 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_VLAN_PPPOE_PAY_L2_SRC_ONLY::\n+\n+ testpmd> flow create 0 ingress pattern eth / vlan / 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 a MAC_VLAN_PPPOE_PAY_L2_SRC_ONLY packet::\n+\n+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ get the hash value\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\")/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ get the hash value\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\")/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/Dot1Q(vlan=2,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=7)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values are the same as the first packet.\n+\n+4. 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 MAC_VLAN_PPPOE_PAY_L2_SRC_ONLY packet, and change the field [Source MAC],\n+ send the packet, check the hash values of the packets are not exist.\n+\n+Subcase 2: MAC_VLAN_PPPOE_PAY_L2_DST_ONLY\n+-----------------------------------------\n+\n+1. validate a rule for RSS type of MAC_VLAN_PPPOE_PAY_L2_DST_ONLY::\n+\n+ testpmd> flow validate 0 ingress pattern eth / vlan / 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_VLAN_PPPOE_PAY_L2_DST_ONLY::\n+\n+ testpmd> flow create 0 ingress pattern eth / vlan / 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 a MAC_VLAN_PPPOE_PAY_L2_DST_ONLY packet::\n+\n+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ get the hash value\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\")/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ get the hash value\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\")/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/Dot1Q(vlan=2,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=7)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values are the same as the first packet.\n+\n+4. 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 MAC_VLAN_PPPOE_PAY_L2_DST_ONLY packet, and change the field [Dest MAC],\n+ send the packet, check the hash values of the packets are not exist.\n+\n+Subcase 3: MAC_VLAN_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY\n+-----------------------------------------------------\n+\n+1. validate a rule for RSS type of MAC_VLAN_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n+\n+ testpmd> flow validate 0 ingress pattern eth / vlan / pppoes / end actions rss types eth l2-src-only 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_VLAN_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY::\n+\n+ testpmd> flow create 0 ingress pattern eth / vlan / pppoes / end actions rss types eth l2-src-only 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 a MAC_VLAN_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY packet::\n+\n+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ get the hash value\n+ change the fields [Source MAC][Dest MAC], send a packet::\n+\n+ sendp([Ether(src=\"00:11:22:33:44:53\", dst=\"10:22:33:44:55:66\")/Dot1Q(vlan=1,type=0x8864)/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\")/Dot1Q(vlan=1,type=0x8864)/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\")/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ get the hash value\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\")/Dot1Q(vlan=2,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=7)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values are the same as the first packet.\n+\n+4. 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 MAC_VLAN_PPPOE_PAY_L2_SRC_ONLY_L2_DST_ONLY packet,\n+ and change the field [Source MAC][Dest MAC], send the packet,\n+ check the hash values of the packets are not exist.\n+\n+Subcase 4: MAC_VLAN_PPPOE_PAY_C_VLAN\n+------------------------------------\n+\n+1. validate a rule for RSS type of MAC_VLAN_PPPOE_PAY::\n+\n+ testpmd> flow validate 0 ingress pattern eth / vlan / pppoes / end actions rss types c-vlan 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_VLAN_PPPOE_PAY::\n+\n+ testpmd> flow create 0 ingress pattern eth / vlan / pppoes / end actions rss types c-vlan 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 a MAC_VLAN_PPPOE_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=0x8864)/PPPoE(sessionid=3)/Raw(\"x\" * 80)],iface=\"ens786f0\",count=1)\n+\n+ get the hash value\n+ change the field [VLAN ID], 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=0x8864)/PPPoE(sessionid=3)/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=\"10:22:33:44:55:99\", dst=\"00:11:22:33:44:55\",type=0x8100)/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=3)/Raw(\"x\" * 80)],iface=\"ens786f0\",count=1)\n+ sendp([Ether(src=\"10:22:33:44:55:66\", dst=\"00:11:22:33:44:53\",type=0x8100)/Dot1Q(vlan=1,type=0x8864)/PPPoE(sessionid=3)/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=0x8864)/PPPoE(sessionid=7)/Raw(\"x\" * 80)],iface=\"ens786f0\",count=1)\n+\n+ check the hash values are the same as as the first packet.\n+\n+4. 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 MAC_VLAN_PPPOE_PAY packet, and change the field\n+ [VLAN ID], send the packet, check the hash values are not\n+ changed.\n+\n+Test case: MAC_PPPOE_IPV4_PAY_symmetric\n+=======================================\n+\n+1. validate a rule for RSS type of MAC_PPPOE_IPV4_PAY_symmetric::\n+\n+ testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / end actions rss func symmetric_toeplitz 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_symmetric::\n+\n+ testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss func symmetric_toeplitz 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+ swap the values of [Source IP] and [Dest IP], send the 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.2\", dst=\"192.168.1.1\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\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+ swap the values of [Source IP] and [Dest IP], send the 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.2\", dst=\"192.168.1.1\", frag=5)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+\n+4. send packets mismatched the rule, and swap the [Source IP] and [Dest IP]\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+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\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+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/IPv6ExtHdrFragment()/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+ * MAC_IPV4_PAY packet::\n+\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(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.21\",dst=\"192.168.0.20\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+ * MAC_IPV4_FRAG packet::\n+\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+ sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.21\",dst=\"192.168.0.20\", frag=5)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\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+ repeat step 3, check the hash values not exist.\n+\n+Test case: MAC_PPPOE_IPV4_UDP_PAY_symmetric\n+===========================================\n+\n+1. turn on default RSS configure to make mismatched packets have hash values::\n+\n+ testpmd> port config all rss all\n+\n+2. validate a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_symmetric::\n+\n+ testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp 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+3. create a rule for RSS type of MAC_PPPOE_IPV4_UDP_PAY_symmetric::\n+\n+ testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss func symmetric_toeplitz 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+4. 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+ swap the values of [Source IP] and [Dest IP], send the 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.2\", dst=\"192.168.1.1\")/UDP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+ swap the values of [Source Port] and [Dest Port], send the 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=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+ swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port], send the 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.2\", dst=\"192.168.1.1\")/UDP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+\n+5. send packets mismatched the rule, and swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port]\n+\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=0x0021)/IP(src=\"192.168.1.2\", dst=\"192.168.1.1\")/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=23,dport=19)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\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\")/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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\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.2\", dst=\"192.168.1.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)/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 of the two packets are different.\n+\n+ * MAC_IPV4_UDP_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=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+ sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.21\",dst=\"192.168.0.20\")/UDP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+6. 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+ repeat step 4, swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port],\n+ check the hash value is changed.\n+\n+Test case: MAC_PPPOE_IPV4_TCP_PAY_symmetric\n+===========================================\n+\n+1. turn on default RSS configure to make mismatched packets have hash values::\n+\n+ testpmd> port config all rss all\n+\n+2. validate a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_symmetric::\n+\n+ testpmd> flow validate 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp 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+3. create a rule for RSS type of MAC_PPPOE_IPV4_TCP_PAY_symmetric::\n+\n+ testpmd> flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss func symmetric_toeplitz 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+4. send matched packets\n+\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=0x0021)/IP(src=\"192.168.1.1\", dst=\"192.168.1.2\")/TCP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ swap the values of [Source IP] and [Dest IP], send the 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.2\", dst=\"192.168.1.1\")/TCP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+ swap the values of [Source Port] and [Dest Port], send the 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=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+ swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port], send the 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.2\", dst=\"192.168.1.1\")/TCP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+\n+5. send packets mismatched the rule, and swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port]\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.2\", dst=\"192.168.1.1\")/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=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+ * MAC_PPPOE_IPV6_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\")/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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/TCP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\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.2\", dst=\"192.168.1.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)/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 of the two packets are different.\n+\n+ * MAC_IPV4_TCP_PAY packet::\n+\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+ sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.21\",dst=\"192.168.0.20\")/TCP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+6. 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+ repeat step 3, swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port],\n+ check the hash value is changed.\n+\n+Test case: MAC_PPPOE_IPV6_PAY_symmetric\n+=======================================\n+\n+1. validate a rule for RSS type of MAC_PPPOE_IPV6_PAY_symmetric::\n+\n+ testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / end actions rss func symmetric_toeplitz types ipv6 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_IPV6_PAY_symmetric::\n+\n+ testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss func symmetric_toeplitz 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_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+ swap the values of [Source IP] and [Dest IP], send the 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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\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+ swap the values of [Source IP] and [Dest IP], send the 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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/IPv6ExtHdrFragment()/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+\n+4. send packets mismatched the rule, and swap the values of [Source IP] and [Dest IP]\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.2\", dst=\"192.168.1.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)/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 of the two packets are different.\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+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src=\"192.168.1.2\", dst=\"192.168.1.1\", frag=5)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+ * MAC_IPV6_PAY packet::\n+\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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+ * MAC_IPV6_FRAG packet::\n+\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+ 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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/IPv6ExtHdrFragment()/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\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+ repeat step 3, check the hash values not exist.\n+\n+Test case: MAC_PPPOE_IPV6_UDP_PAY_symmetric\n+===========================================\n+\n+1. turn on default RSS configure to make mismatched packets have hash values::\n+\n+ testpmd> port config all rss all\n+\n+2. validate a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_symmetric::\n+\n+ testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp 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+3. create a rule for RSS type of MAC_PPPOE_IPV6_UDP_PAY_symmetric::\n+\n+ testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / udp / end actions rss func symmetric_toeplitz 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+4. send matched packets\n+\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\")/UDP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ swap the values of [Source IP] and [Dest IP], send the 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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+ swap the values of [Source Port] and [Dest Port], send the 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=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+ swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port], send the 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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+\n+5. send packets mismatched the rule, and swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port]\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.2\", dst=\"192.168.1.1\")/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=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+ * MAC_PPPOE_IPV6_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\")/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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/TCP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\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+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+ * MAC_IPV6_UDP_PAY packet::\n+\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(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+6. 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+ repeat step 3, swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port],\n+ check the hash values are changed.\n+\n+Test case: MAC_PPPOE_IPV6_TCP_PAY_symmetric\n+===========================================\n+\n+1. turn on default RSS configure to make mismatched packets have hash values::\n+\n+ testpmd> port config all rss all\n+\n+2. validate a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_symmetric::\n+\n+ testpmd> flow validate 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp 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+3. create a rule for RSS type of MAC_PPPOE_IPV6_TCP_PAY_symmetric::\n+\n+ testpmd> flow create 0 ingress pattern eth / pppoes / ipv6 / tcp / end actions rss func symmetric_toeplitz 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+4. send matched packets\n+\n+ * MAC_PPPOE_IPV6_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\")/TCP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ swap the values of [Source IP] and [Dest IP], send the 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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/TCP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+ swap the values of [Source Port] and [Dest Port], send the 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=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+ swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port], send the 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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/TCP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is not changed.\n+\n+5. send packets mismatched the rule, and swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port]\n+\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=0x0021)/IP(src=\"192.168.1.2\", dst=\"192.168.1.1\")/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=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\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\")/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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\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+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+ * MAC_IPV6_TCP_PAY packet::\n+\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+ 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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/TCP(sport=23,dport=25)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are different.\n+\n+6. 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+ repeat step 3, swap the values of [Source IP] and [Dest IP], [Source Port] and [Dest Port],\n+ check the hash values are changed.\n+\n+Test case: simple_xor\n+=====================\n+\n+1. validate a simple_xor rule::\n+\n+ testpmd> flow validate 0 ingress pattern end actions rss func simple_xor 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 simple_xor rule::\n+\n+ testpmd> flow create 0 ingress pattern end actions rss func simple_xor key_len 0 queues end / end\n+ testpmd> flow list 0\n+\n+ check the rule exists in the list.\n+\n+3. send packets, and swap the values of [Source IP] and [Dest IP]\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.2\", dst=\"192.168.1.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)/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 of the two packets are the same.\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+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src=\"192.168.1.2\", dst=\"192.168.1.1\")/UDP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are the same.\n+\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=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.2\", dst=\"192.168.1.1\")/TCP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are the same.\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+ sendp([Ether(src=\"00:11:22:33:44:55\", dst=\"10:22:33:44:55:66\")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are the same.\n+\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\")/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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are the same.\n+\n+ * MAC_PPPOE_IPV6_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\")/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:2022\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/TCP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash values of the two packets are the same.\n+\n+4. 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+ repeat step 3, check the hash values are changed.\n+\n+Test Case: multirules test\n+==========================\n+\n+Subcase 1: two rules with same pattern but different hash input set, not hit default profile\n+--------------------------------------------------------------------------------------------\n+\n+1. create a MAC_PPPOE_IPV4_UDP_PAY_L3_SRC_ONLY rule::\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 list 0\n+\n+ check the rule exists in the list.\n+\n+2. send a 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 IP], send a 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.3\", dst=\"192.168.1.2\")/UDP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is different from the first packet.\n+\n+3. create a rule with same pattern but different hash input set::\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 list 0\n+\n+ check the rule exists in the list.\n+\n+4. send a 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 IP], send a 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.3\", dst=\"192.168.1.2\")/UDP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is the same as the first packet.\n+ change the field [Dest IP], send a 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.7\")/UDP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is different from the first packet.\n+\n+5. destroy the rule 1::\n+\n+ testpmd> flow destroy 0 rule 1\n+ testpmd> flow list 0\n+\n+ check the rule 1 not exists in the list.\n+ send a MAC_PPPOE_IPV4_UDP_PAY packet, hit default pppoe_ipv4 profile::\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 a 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.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+ destroy the rule 0::\n+\n+ testpmd> flow destroy 0 rule 0\n+ testpmd> flow list 0\n+\n+ check the rule 0 not exists in the list.\n+ send a MAC_PPPOE_IPV4_UDP_PAY packet, hit default pppoe_ipv4 profile::\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 a 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.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+\n+Subcase 2: two rules with same pattern but different hash input set, hit default profile\n+----------------------------------------------------------------------------------------\n+\n+1. create a MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY rule::\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+2. send a 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 a 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.3\", dst=\"192.168.1.2\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is different from the first packet.\n+ change the field [Dest IP], send a 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.5\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is the same as the first packet.\n+\n+3. create a rule with same pattern but different hash input set::\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+4. send a 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 a 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.3\", dst=\"192.168.1.2\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is the same as the first packet.\n+ change the field [Dest IP], send a 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.7\")/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is different from the first packet.\n+\n+5. destroy the rule 1::\n+\n+ testpmd> flow destroy 0 rule 1\n+ testpmd> flow list 0\n+\n+ check the rule 1 not exists in the list.\n+ send the 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+ check the hash value not exists.\n+ destroy the rule 0::\n+\n+ testpmd> flow destroy 0 rule 0\n+ testpmd> flow list 0\n+\n+ check the rule 0 not exists in the list.\n+ send the MAC_PPPOE_IPV4_PAY packet, check the hash value not exists.\n+\n+Subcase 3: two rules, scope smaller created first, and the larger one created later\n+-----------------------------------------------------------------------------------\n+\n+1. create a MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY rule::\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+2. send a 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 Port], send a 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=19,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is different from the first packet.\n+ change other fields, send a packet::\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.5\")/UDP(sport=25,dport=99)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is the same as the first packet.\n+\n+3. create a MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY rule::\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+4. send a 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 IP], send a 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.3\", dst=\"192.168.1.2\")/UDP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is different from the first packet.\n+ change other fields, send a packet::\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.5\")/UDP(sport=19,dport=99)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is the same as the first packet.\n+\n+5. destroy the rule 1::\n+\n+ testpmd> flow destroy 0 rule 1\n+ testpmd> flow list 0\n+\n+ check the rule 1 not exists in the list.\n+ repeat step 2, get the same result.\n+ destroy the rule 0::\n+\n+ testpmd> flow destroy 0 rule 0\n+ testpmd> flow list 0\n+\n+ send a MAC_PPPOE_IPV4_UDP_PAY packet, check the hash values not exists.\n+\n+Subcase 4: two rules, scope larger created first, and the smaller one created later\n+-----------------------------------------------------------------------------------\n+\n+1. create a MAC_PPPOE_IPV4_PAY_L3_SRC_ONLY rule::\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+2. send a 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 IP], send a 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.3\", dst=\"192.168.1.2\")/UDP(sport=25,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is different from the first packet.\n+ change other fields, send a packet::\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.5\")/UDP(sport=19,dport=99)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is the same as the first packet.\n+\n+3. create a MAC_PPPOE_IPV4_UDP_PAY_L4_SRC_ONLY rule::\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+4. send a 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 Port], send a 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=19,dport=23)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is different from the first packet.\n+ change other fields, send a packet::\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.5\")/UDP(sport=25,dport=99)/Raw(\"x\"*80)],iface=\"ens786f0\")\n+\n+ check the hash value is the same as the first packet.\n+\n+5. destroy the rule 1::\n+\n+ testpmd> flow destroy 0 rule 1\n+ testpmd> flow list 0\n+\n+ check the rule 1 not exists in the list.\n+ repeat step 2, hit pppoe_ipv4 profile, get the same result.\n+ destroy the rule 0::\n+\n+ testpmd> flow destroy 0 rule 0\n+ testpmd> flow list 0\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: duplicated rules (not supported in 20.08)\n+----------------------------------------------------\n+\n+1. create a PFCP rule::\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+\n+ the rule is created successfully.\n+\n+2. create the same rule again, Failed to create flow, report message::\n+\n+ Add rule failed.: Operation not permitted\n+\n+3. check only the first rule exists in the list.\n+\n+Subcase 3: 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 4: 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 5: 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 6: 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": [ "V1" ] }{ "id": 75971, "url": "