Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/83512/?format=api
http://patches.dpdk.org/api/patches/83512/?format=api", "web_url": "http://patches.dpdk.org/project/dts/patch/20201103083656.16541-9-haiyangx.zhao@intel.com/", "project": { "id": 3, "url": "http://patches.dpdk.org/api/projects/3/?format=api", "name": "DTS", "link_name": "dts", "list_id": "dts.dpdk.org", "list_email": "dts@dpdk.org", "web_url": "", "scm_url": "git://dpdk.org/tools/dts", "webscm_url": "http://git.dpdk.org/tools/dts/", "list_archive_url": "https://inbox.dpdk.org/dts", "list_archive_url_format": "https://inbox.dpdk.org/dts/{}", "commit_url_format": "" }, "msgid": "<20201103083656.16541-9-haiyangx.zhao@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dts/20201103083656.16541-9-haiyangx.zhao@intel.com", "date": "2020-11-03T08:36:56", "name": "[V4,8/8] tests/cvl_advanced_rss_gtpu: add cvl_advanced_rss_gtpu", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "29e5a3c6c9364e60125771640adc37531dd65dbd", "submitter": { "id": 1978, "url": "http://patches.dpdk.org/api/people/1978/?format=api", "name": "Zhao, HaiyangX", "email": "haiyangx.zhao@intel.com" }, "delegate": null, "mbox": "http://patches.dpdk.org/project/dts/patch/20201103083656.16541-9-haiyangx.zhao@intel.com/mbox/", "series": [ { "id": 13608, "url": "http://patches.dpdk.org/api/series/13608/?format=api", "web_url": "http://patches.dpdk.org/project/dts/list/?series=13608", "date": "2020-11-03T08:36:48", "name": "tests: update or add rss related suites", "version": 4, "mbox": "http://patches.dpdk.org/series/13608/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/83512/comments/", "check": "pending", "checks": "http://patches.dpdk.org/api/patches/83512/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 A42CCA0521;\n\tTue, 3 Nov 2020 09:38:53 +0100 (CET)", "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 84239C872;\n\tTue, 3 Nov 2020 09:38:45 +0100 (CET)", "from mga18.intel.com (mga18.intel.com [134.134.136.126])\n by dpdk.org (Postfix) with ESMTP id AD112C80C\n for <dts@dpdk.org>; Tue, 3 Nov 2020 09:38:42 +0100 (CET)", "from fmsmga008.fm.intel.com ([10.253.24.58])\n by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 03 Nov 2020 00:38:41 -0800", "from unknown (HELO localhost.localdomain) ([10.240.183.55])\n by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 03 Nov 2020 00:38:39 -0800" ], "IronPort-SDR": [ "\n AWDtSMjQfR40iL4od+aSAqQyNb/TiwBmH7zEm4+04N0XdS+MgMy6nsByqOvVw3APjKyyRM8XyE\n jwpgMhTBLV8w==", "\n KNF0QVKSmOHyjSA5hzX1O0yJdRp4z0soYB37aP288RagraV+D5+ED1nicwEVGgoYg5pCE3yTgG\n TGwiz+1tRGNw==" ], "X-IronPort-AV": [ "E=McAfee;i=\"6000,8403,9793\"; a=\"156798055\"", "E=Sophos;i=\"5.77,447,1596524400\"; d=\"scan'208\";a=\"156798055\"", "E=Sophos;i=\"5.77,447,1596524400\"; d=\"scan'208\";a=\"305734324\"" ], "X-Amp-Result": "SKIPPED(no attachment in message)", "X-Amp-File-Uploaded": "False", "From": "Haiyang Zhao <haiyangx.zhao@intel.com>", "To": "dts@dpdk.org,\n\tqi.fu@intel.com", "Cc": "Haiyang Zhao <haiyangx.zhao@intel.com>", "Date": "Tue, 3 Nov 2020 16:36:56 +0800", "Message-Id": "<20201103083656.16541-9-haiyangx.zhao@intel.com>", "X-Mailer": "git-send-email 2.17.1", "In-Reply-To": "<20201103083656.16541-1-haiyangx.zhao@intel.com>", "References": "<20201103083656.16541-1-haiyangx.zhao@intel.com>", "Subject": "[dts] [PATCH V4 8/8] tests/cvl_advanced_rss_gtpu: add\n\tcvl_advanced_rss_gtpu", "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": "*.add CVL PF rss gtpu cases.\n\nSigned-off-by: Haiyang Zhao <haiyangx.zhao@intel.com>\n---\n tests/TestSuite_cvl_advanced_rss_gtpu.py | 5294 ++++++++++++++++++++++\n 1 file changed, 5294 insertions(+)\n create mode 100755 tests/TestSuite_cvl_advanced_rss_gtpu.py", "diff": "diff --git a/tests/TestSuite_cvl_advanced_rss_gtpu.py b/tests/TestSuite_cvl_advanced_rss_gtpu.py\nnew file mode 100755\nindex 0000000..c92ff6a\n--- /dev/null\n+++ b/tests/TestSuite_cvl_advanced_rss_gtpu.py\n@@ -0,0 +1,5294 @@\n+# BSD LICENSE\n+#\n+# Copyright(c) 2020 Intel Corporation. All rights reserved.\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+# * 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+# * 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 FOR\n+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+\n+\n+import re\n+import time\n+from packet import Packet\n+from pmd_output import PmdOutput\n+from test_case import TestCase\n+from rte_flow_common import RssProcessing\n+\n+\n+mac_ipv4_gtpu_ipv4_basic = {\n+ 'ipv4-nonfrag': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'ipv4-frag': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+ 'ipv4-icmp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'ipv4-udp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP()/(\"X\"*480)',\n+}\n+\n+mac_ipv4_gtpu_ipv4_l3src_changed_pkt = eval(str(mac_ipv4_gtpu_ipv4_basic).replace('192.168.0.2', '192.168.1.2'))\n+mac_ipv4_gtpu_ipv4_l3dst_changed_pkt = eval(str(mac_ipv4_gtpu_ipv4_basic).replace('192.168.0.1', '192.168.1.1'))\n+mac_ipv4_gtpu_ipv4_unmatched_pkt = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+]\n+\n+mac_ipv4_gtpu_ipv4_l3dst_only = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_l3dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-nonfrag'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-frag'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-icmp'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-udp'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'],\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-frag'],\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'],\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-udp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv4_l3src_only = eval(str(mac_ipv4_gtpu_ipv4_l3dst_only)\n+ .replace('mac_ipv4_gtpu_ipv4_l3dst', 'mac_ipv4_gtpu_ipv4_l3src')\n+ .replace('l3-dst-only', 'l3-src-only')\n+ .replace('check_hash_same', 'hash_check_different')\n+ .replace('check_hash_different', 'check_hash_same')\n+ .replace('hash_check_different', 'check_hash_different'))\n+mac_ipv4_gtpu_ipv4_all = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_all',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-frag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-udp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'],\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-frag'],\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'],\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-udp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv4_gtpu = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_gtpu',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / end actions rss types gtpu end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-frag'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-frag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-udp'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-udp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'],\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-frag'],\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'],\n+ mac_ipv4_gtpu_ipv4_basic['ipv4-udp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv4_toeplitz = [mac_ipv4_gtpu_ipv4_l3dst_only, mac_ipv4_gtpu_ipv4_l3src_only,\n+ mac_ipv4_gtpu_ipv4_all, mac_ipv4_gtpu_ipv4_gtpu]\n+\n+mac_ipv4_gtpu_ipv4_symmetric = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_symmetric',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',\n+ 'pre-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\", frag=6)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': {'save_hash': 'nonfrag'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+ 'action': {'save_hash': 'frag'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\", frag=6)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'action': {'save_hash': 'icmp'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ { # unmatch MAC_IPV4_GTPU_IPV6 nonfrag\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ { # unmatch MAC_IPV4_GTPU_EH_IPV4\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ { # unmatch MAC_IPV4_GTPU_EH_IPV4\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': {'check_no_hash_or_different': 'nonfrag'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'action': {'check_no_hash_or_different': 'nonfrag'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+ 'action': {'check_no_hash_or_different': 'frag'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\", frag=6)/(\"X\"*480)',\n+ 'action': {'check_no_hash_or_different': 'frag'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'action': {'check_no_hash_or_different': 'icmp'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+ 'action': {'check_no_hash_or_different': 'icmp'},\n+ },\n+ ],\n+}\n+\n+mac_ipv4_gtpu_ipv6_symmetric = eval(str(mac_ipv4_gtpu_ipv4_symmetric).replace('IPv6', 'IPv61')\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.2\",src=\"192.168.0.1\"', 'IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\"')\n+ .replace(', frag=6)', ')/IPv6ExtHdrFragment()')\n+ .replace('IPv61(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")')\n+ .replace('IPv61(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")')\n+ .replace('gtpu / ipv4', 'gtpu / ipv6').replace('types ipv4', 'types ipv6')\n+ )\n+\n+mac_ipv4_gtpu_ipv4_udp_symmetric = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_symmetric',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end',\n+ 'pre-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': {'save_hash': 'basic_with_rule'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': {'check_hash_different': 'basic_with_rule'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': {'check_hash_different': 'basic_with_rule'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': {'check_hash_different': 'basic_with_rule'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': {'check_hash_different': 'basic_with_rule'},\n+ },\n+ ],\n+}\n+\n+mac_ipv4_gtpu_ipv6_udp_symmetric = eval(str(mac_ipv4_gtpu_ipv4_udp_symmetric).replace('IPv6', 'IPv61')\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.2\",src=\"192.168.0.1\"', 'IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\"')\n+ .replace('IPv61(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")')\n+ .replace('IPv61(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")')\n+ .replace('gtpu / ipv4', 'gtpu / ipv6').replace('types ipv4-udp', 'types ipv6-udp')\n+ )\n+\n+mac_ipv4_gtpu_ipv4_tcp_symmetric = eval(str(mac_ipv4_gtpu_ipv4_udp_symmetric).replace('TCP(', 'TCP1(')\n+ .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')\n+ .replace('udp / end', 'tcp / end ').replace('ipv4-udp', 'ipv4-tcp')\n+ .replace('udp_symmetric', 'tcp_symmetric'))\n+\n+mac_ipv4_gtpu_ipv6_tcp_symmetric = eval(str(mac_ipv4_gtpu_ipv4_tcp_symmetric).replace('IPv6', 'IPv61')\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.2\",src=\"192.168.0.1\"', 'IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\"')\n+ .replace('IPv61(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")')\n+ .replace('IPv61(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")')\n+ .replace('gtpu / ipv4', 'gtpu / ipv6').replace('types ipv4-tcp', 'types ipv6-tcp')\n+ )\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_symmetric = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_symmetric',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',\n+ 'pre-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\", frag=6)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP()/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP()/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\", frag=6)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP()/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP()/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\", frag=6)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP()/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP()/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': 'save_or_no_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'action': 'check_no_hash_or_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+ 'action': 'save_or_no_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\", frag=6)/(\"X\"*480)',\n+ 'action': 'check_no_hash_or_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'action': 'save_or_no_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+ 'action': 'check_no_hash_or_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP()/(\"X\"*480)',\n+ 'action': 'save_or_no_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP()/(\"X\"*480)',\n+ 'action': 'check_no_hash_or_different',\n+ },\n+ ],\n+}\n+mac_ipv4_gtpu_eh_ul_ipv4_symmetric = eval(str(mac_ipv4_gtpu_eh_dl_ipv4_symmetric)\n+ .replace('(type=1', '(type=2')\n+ .replace('(type=0', '(type=1')\n+ .replace('(type=2', '(type=0')\n+ .replace('eh_dl', 'eh_ul')\n+ .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')\n+ )\n+\n+mac_ipv4_gtpu_eh_ipv4_symmetric = [mac_ipv4_gtpu_eh_dl_ipv4_symmetric, mac_ipv4_gtpu_eh_ul_ipv4_symmetric]\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end',\n+ 'pre-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_no_hash_or_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_no_hash_or_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_no_hash_or_different',\n+ },\n+ ],\n+}\n+mac_ipv4_gtpu_eh_ul_ipv4_udp_symmetric = eval(str(mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric)\n+ .replace('(type=1', '(type=2')\n+ .replace('(type=0', '(type=1')\n+ .replace('(type=2', '(type=0')\n+ .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')\n+ .replace('eh_dl', 'eh_ul'))\n+mac_ipv4_gtpu_eh_ipv4_udp_symmetric = [mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric, mac_ipv4_gtpu_eh_ul_ipv4_udp_symmetric]\n+\n+mac_ipv4_gtpu_eh_ipv4_tcp_symmetric = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')\n+ .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')\n+ .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))\n+ for element in mac_ipv4_gtpu_eh_ipv4_udp_symmetric]\n+\n+mac_ipv4_gtpu_eh_ipv6_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_symmetric).replace('IPv6', 'IPv61')\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.2\",src=\"192.168.0.1\"', 'IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\"')\n+ .replace(', frag=6)', ')/IPv6ExtHdrFragment()')\n+ .replace('IPv61(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")')\n+ .replace('IPv61(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")')\n+ .replace('ipv4 / end', 'ipv6 / end').replace('types ipv4', 'types ipv6')\n+ .replace('ipv4_symmetric', 'ipv6_symmetric')\n+ )\n+\n+mac_ipv4_gtpu_eh_ipv6_udp_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_udp_symmetric).replace('IPv6', 'IPv61')\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.2\",src=\"192.168.0.1\"', 'IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\"')\n+ .replace('IPv61(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")')\n+ .replace('IPv61(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")')\n+ .replace('ipv4 / udp / end', 'ipv6 / udp / end').replace('types ipv4-udp', 'types ipv6-udp')\n+ .replace('ipv4_udp_symmetric', 'ipv6_udp_symmetric')\n+ )\n+\n+\n+mac_ipv4_gtpu_eh_ipv6_tcp_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_tcp_symmetric).replace('IPv6', 'IPv61')\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.2\",src=\"192.168.0.1\"', 'IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\"')\n+ .replace('IPv61(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")')\n+ .replace('IPv61(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")', 'IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")')\n+ .replace('ipv4 / tcp / end', 'ipv6 / tcp / end').replace('types ipv4-tcp', 'types ipv6-tcp')\n+ .replace('ipv4_tcp_symmetric', 'ipv6_tcp_symmetric')\n+ )\n+\n+mac_ipv4_gtpu_ipv4_udp_basic = 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)'\n+mac_ipv4_gtpu_ipv4_udp_unmatch = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)'\n+]\n+mac_ipv4_gtpu_ipv4_udp_l3dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv4_udp_l3src = eval(str(mac_ipv4_gtpu_ipv4_udp_l3dst)\n+ .replace('mac_ipv4_gtpu_ipv4_udp_l3dst', 'mac_ipv4_gtpu_ipv4_udp_l3src')\n+ .replace('l3-dst-only', 'l3-src-only')\n+ .replace('check_hash_same', 'hash_check_different')\n+ .replace('check_hash_different', 'check_hash_same')\n+ .replace('hash_check_different', 'check_hash_different'))\n+\n+mac_ipv4_gtpu_ipv4_udp_l3src_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3src_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport=22', 'sport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport=23', 'dport=33').replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv4_udp_l3src_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3src_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport=22', 'sport=32').replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv4_udp_l3dst_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3dst_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport=22', 'sport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport=23', 'dport=33').replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv4_udp_l3dst_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3dst_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport=22', 'sport=32').replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_ipv4_udp_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport=22', 'sport=32')\n+ .replace('192.168.0', '192.168.1'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_ipv4_udp_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport=22', 'sport=32'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport=23', 'dport=32')\n+ .replace('192.168.0', '192.168.1'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv4_udp_all = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_all',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport=22', 'sport=32'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv4_udp_gtpu = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_gtpu',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types gtpu end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168.0', '192.168.1')\n+ .replace('sport=22', 'sport=32')\n+ .replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+\n+mac_ipv4_gtpu_ipv4_udp_toeplitz = [mac_ipv4_gtpu_ipv4_udp_l3dst, mac_ipv4_gtpu_ipv4_udp_l3src,\n+ mac_ipv4_gtpu_ipv4_udp_l3dst_l4src, mac_ipv4_gtpu_ipv4_udp_l3dst_l4dst,\n+ mac_ipv4_gtpu_ipv4_udp_l3src_l4src, mac_ipv4_gtpu_ipv4_udp_l3src_l4dst,\n+ mac_ipv4_gtpu_ipv4_udp_l4src, mac_ipv4_gtpu_ipv4_udp_l4dst,\n+ mac_ipv4_gtpu_ipv4_udp_all, mac_ipv4_gtpu_ipv4_udp_gtpu]\n+\n+mac_ipv4_gtpu_ipv4_tcp_toeplitz = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')\n+ .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')\n+ .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))\n+ for element in mac_ipv4_gtpu_ipv4_udp_toeplitz]\n+\n+mac_ipv4_gtpu_ipv6_basic = {\n+ 'ipv6-nonfrag': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'ipv6-frag': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+ 'ipv6-icmp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+ 'ipv6-udp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP()/(\"X\"*480)',\n+}\n+\n+mac_ipv4_gtpu_ipv6_l3src_changed_pkt = eval(str(mac_ipv4_gtpu_ipv6_basic).replace('ABAB', '1212'))\n+mac_ipv4_gtpu_ipv6_l3dst_changed_pkt = eval(str(mac_ipv4_gtpu_ipv6_basic).replace('CDCD', '3434'))\n+mac_ipv4_gtpu_ipv6_unmatched_pkt = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")/(\"X\"*480)',\n+]\n+mac_ipv4_gtpu_ipv6_l3dst_only = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_l3dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-nonfrag'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-frag'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-icmp'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-udp'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'],\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-frag'],\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'],\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv6_l3src_only = eval(str(mac_ipv4_gtpu_ipv6_l3dst_only)\n+ .replace('mac_ipv4_gtpu_ipv6_l3dst', 'mac_ipv4_gtpu_ipv6_l3src')\n+ .replace('l3-dst-only', 'l3-src-only')\n+ .replace('check_hash_same', 'hash_check_different')\n+ .replace('check_hash_different', 'check_hash_same')\n+ .replace('hash_check_different', 'check_hash_different'))\n+mac_ipv4_gtpu_ipv6_all = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_all',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-frag'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'],\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-frag'],\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'],\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv6_gtpu = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_gtpu',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / end actions rss types gtpu end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-frag'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-frag'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'],\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-frag'],\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'],\n+ mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv6_toeplitz = [mac_ipv4_gtpu_ipv6_l3dst_only, mac_ipv4_gtpu_ipv6_l3src_only,\n+ mac_ipv4_gtpu_ipv6_all, mac_ipv4_gtpu_ipv6_gtpu]\n+\n+mac_ipv4_gtpu_ipv6_udp_basic = 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)'\n+mac_ipv4_gtpu_ipv6_udp_unmatch = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)'\n+]\n+mac_ipv4_gtpu_ipv6_udp_l3dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('ABAB', '1212'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv6_udp_l3src = eval(str(mac_ipv4_gtpu_ipv6_udp_l3dst)\n+ .replace('mac_ipv4_gtpu_ipv6_udp_l3dst', 'mac_ipv4_gtpu_ipv6_udp_l3src')\n+ .replace('l3-dst-only', 'l3-src-only')\n+ .replace('check_hash_same', 'hash_check_different')\n+ .replace('check_hash_different', 'check_hash_same')\n+ .replace('hash_check_different', 'check_hash_different'))\n+\n+mac_ipv4_gtpu_ipv6_udp_l3src_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3src_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('ABAB', '1212'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport=22', 'sport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport=23', 'dport=33').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv6_udp_l3src_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3src_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('ABAB', '1212'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport=22', 'sport=32').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv6_udp_l3dst_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3dst_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport=22', 'sport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport=23', 'dport=33').replace('ABAB', '1212'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv6_udp_l3dst_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3dst_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport=22', 'sport=32').replace('ABAB', '1212'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_ipv6_udp_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport=22', 'sport=32')\n+ .replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_ipv6_udp_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport=22', 'sport=32'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport=23', 'dport=32')\n+ .replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv6_udp_all = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_all',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport=22', 'sport=32'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('ABAB', '1212'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv6_udp_gtpu = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_gtpu',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types gtpu end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('ABAB', '1212').replace('CDCD', '3434')\n+ .replace('sport=22', 'sport=32')\n+ .replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_ipv6_udp_toeplitz = [mac_ipv4_gtpu_ipv6_udp_l3dst, mac_ipv4_gtpu_ipv6_udp_l3src,\n+ mac_ipv4_gtpu_ipv6_udp_l3dst_l4src, mac_ipv4_gtpu_ipv6_udp_l3dst_l4dst,\n+ mac_ipv4_gtpu_ipv6_udp_l3src_l4src, mac_ipv4_gtpu_ipv6_udp_l3src_l4dst,\n+ mac_ipv4_gtpu_ipv6_udp_l4src, mac_ipv4_gtpu_ipv6_udp_l4dst,\n+ mac_ipv4_gtpu_ipv6_udp_all, mac_ipv4_gtpu_ipv6_udp_gtpu]\n+\n+mac_ipv4_gtpu_ipv6_tcp_toeplitz = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')\n+ .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')\n+ .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))\n+ for element in mac_ipv4_gtpu_ipv6_udp_toeplitz]\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_basic = {\n+ 'ipv4-nonfrag': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'ipv4-frag': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+ 'ipv4-icmp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'ipv4-udp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP()/(\"X\"*480)',\n+ 'ipv4-tcp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP()/(\"X\"*480)',\n+\n+}\n+\n+mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt = eval(str(mac_ipv4_gtpu_eh_dl_ipv4_basic).replace('192.168.0.2', '192.168.1.2'))\n+mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt = eval(str(mac_ipv4_gtpu_eh_dl_ipv4_basic).replace('192.168.0.1', '192.168.1.1'))\n+mac_ipv4_gtpu_eh_ipv4_unmatched_pkt = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+]\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_l3dst_only = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_l3dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4-nonfrag'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4-frag'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4-icmp'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4-udp'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4-tcp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4-tcp'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_l3src_only = eval(str(mac_ipv4_gtpu_eh_dl_ipv4_l3dst_only)\n+ .replace('eh_dl_ipv4_l3dst', 'eh_ul_ipv4_l3src')\n+ .replace('l3-dst-only', 'l3-src-only')\n+ .replace('check_hash_same', 'hash_check_different')\n+ .replace('check_hash_different', 'check_hash_same')\n+ .replace('hash_check_different', 'check_hash_different'))\n+mac_ipv4_gtpu_eh_dl_ipv4_all = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_all',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4-tcp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4-tcp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_gtpu = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_gtpu',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types gtpu end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_ipv4_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'],\n+ mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv4 = [mac_ipv4_gtpu_eh_dl_ipv4_l3dst_only, mac_ipv4_gtpu_eh_dl_ipv4_l3src_only,\n+ mac_ipv4_gtpu_eh_dl_ipv4_all, mac_ipv4_gtpu_eh_dl_ipv4_gtpu]\n+\n+mac_ipv4_gtpu_eh_ul_ipv4 = [eval(str(element).replace('(type=1', '(type=2')\n+ .replace('(type=0', '(type=1').replace('(type=2', '(type=0')\n+ .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')\n+ .replace('eh_dl', 'eh_ul'))\n+ for element in mac_ipv4_gtpu_eh_dl_ipv4]\n+\n+mac_ipv4_gtpu_eh_ipv4_toeplitz = mac_ipv4_gtpu_eh_dl_ipv4 + mac_ipv4_gtpu_eh_ul_ipv4\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic = {\n+ 'ipv4-nonfrag': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'ipv4-nonfrag_ul': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'ipv4-frag': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+ 'ipv4-icmp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'ipv4-udp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP()/(\"X\"*480)',\n+\n+}\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic).replace('192.168.0.2', '192.168.1.2'))\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic).replace('192.168.0.1', '192.168.1.1'))\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_unmatched_pkt = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+]\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_only = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-nonfrag'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_ul'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-nonfrag_ul'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-nonfrag_ul'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-frag'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-icmp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-udp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_ul'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_only = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_only)\n+ .replace('ul_dl_ipv4_l3dst', 'ul_dl_ipv4_l3src')\n+ .replace('l3-dst-only', 'l3-src-only')\n+ .replace('dst=\"192.168.0.1\",src=\"192.168.1.2\"', 'dst=\"192.168.0.1\",src=\"192.168.1.3\"')\n+ .replace('dst=\"192.168.1.1\",src=\"192.168.0.2\"', 'dst=\"192.168.0.1\",src=\"192.168.1.2\"')\n+ .replace('dst=\"192.168.0.1\",src=\"192.168.1.3\"', 'dst=\"192.168.1.1\",src=\"192.168.0.2\"')\n+ )\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_all = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_all',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_ul'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-nonfrag_ul'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-nonfrag_ul'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_ul'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_ul'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_ul'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_gtpu = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_gtpu',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types gtpu end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_ul'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_ul'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_ul'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'].replace('192.168.0.', '192.168.1.'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_ul'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_toeplitz = [mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_only,\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_only,\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_all,\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_gtpu]\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic = {\n+ 'dl': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'ul': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+}\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+]\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_only = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.2', '192.168.1.2')\n+ .replace('sport=22, dport=23', 'sport=32, dport=33')\n+ .replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_only = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_only)\n+ .replace('ul_dl_ipv4_udp_l3dst', 'ul_dl_ipv4_udp_l3src')\n+ .replace('l3-dst-only', 'l3-src-only')\n+ .replace('dst=\"192.168.0.1\",src=\"192.168.1.2\"', 'dst=\"192.168.0.1\",src=\"192.168.1.3\"')\n+ .replace('dst=\"192.168.1.1\",src=\"192.168.0.2\"', 'dst=\"192.168.0.1\",src=\"192.168.1.2\"')\n+ .replace('dst=\"192.168.0.1\",src=\"192.168.1.3\"', 'dst=\"192.168.1.1\",src=\"192.168.0.2\"')\n+ )\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'].replace('sport=22', 'sport=32'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.1', '192.168.1.1')\n+ .replace('dport=23', 'dport=33')\n+ .replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'].replace('192.168.0.1', '192.168.1.1')\n+ .replace('dport=23', 'dport=33')\n+ .replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4dst = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src)\n+ .replace('udp_l3src_l4src', 'udp_l3src_l4dst')\n+ .replace('l4-src-only', 'l4-dst-only')\n+ .replace('sport=32, dport=23', 'sport=22, dport=34')\n+ .replace('sport=22, dport=33', 'sport=32, dport=23')\n+ )\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4src = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src)\n+ .replace('udp_l3src_l4src', 'udp_l3dst_l4src')\n+ .replace('l3-src-only', 'l3-dst-only')\n+ .replace('dst=\"192.168.0.1\",src=\"192.168.1.2\"', 'dst=\"192.168.0.1\",src=\"192.168.1.3\"')\n+ .replace('dst=\"192.168.1.1\",src=\"192.168.0.2\"', 'dst=\"192.168.0.1\",src=\"192.168.1.2\"')\n+ .replace('dst=\"192.168.0.1\",src=\"192.168.1.3\"', 'dst=\"192.168.1.1\",src=\"192.168.0.2\"')\n+ )\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4dst = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4src)\n+ .replace('udp_l3dst_l4src', 'udp_l3dst_l4dst')\n+ .replace('l3-src-only', 'l3-dst-only')\n+ .replace('l4-src-only', 'l4-dst-only')\n+ .replace('sport=32, dport=23', 'sport=22, dport=34')\n+ .replace('sport=22, dport=33', 'sport=32, dport=23')\n+ )\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'].replace('sport=22', 'sport=32'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0', '192.168.1')\n+ .replace('dport=23', 'dport=33')\n+ .replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'].replace('192.168.0', '192.168.1')\n+ .replace('dport=23', 'dport=33')\n+ .replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4dst_only = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only)\n+ .replace('udp_l4src_only', 'udp_l4dst_only')\n+ .replace('l4-src-only', 'l4-dst-only')\n+ .replace('sport=32, dport=23', 'sport=22, dport=34')\n+ .replace('sport=22, dport=33', 'sport=32, dport=23')\n+ )\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('sport=22', 'sport=32'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_gtpu = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_gtpu',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types gtpu end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl']\n+ .replace('192.168.0.', '192.168.1.')\n+ .replace('sport=22, dport=23', 'sport=32, dport=33'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul']\n+ .replace('192.168.0.', '192.168.1.')\n+ .replace('sport=22, dport=23', 'sport=32, dport=33'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'],\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz = [\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_only,\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_only,\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4dst,\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4src,\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4dst,\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only,\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4dst_only,\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp,\n+ mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_gtpu,\n+]\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_tcp_toeplitz = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')\n+ .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')\n+ .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))\n+ for element in mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz]\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv6_toeplitz = [eval(str(element).replace('gtp_psc / ipv4', 'gtp_psc / ipv6')\n+ .replace('types ipv4', 'types ipv6')\n+ .replace('ul_dl_ipv4', 'ul_dl_ipv6')\n+ .replace(', frag=6)', ')/IPv6ExtHdrFragment()')\n+ .replace('IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"','IP(dst=\"192.168.0.3\", src=\"192.168.0.3\"',)\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.1.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"1212:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.1.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"3434:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.1.1\",src=\"192.168.1.2\"', 'IPv6(dst=\"1212:910B:6666:3457:8295:3333:1800:2929\",src=\"3434:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.3\",src=\"192.168.0.3\"', 'IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"'))\n+ for element in mac_ipv4_gtpu_eh_without_ul_dl_ipv4_toeplitz]\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv6_udp_toeplitz = [eval(str(element).replace('gtp_psc / ipv4', 'gtp_psc / ipv6')\n+ .replace('ipv4-udp', 'ipv6-udp')\n+ .replace('ul_dl_ipv4_udp', 'ul_dl_ipv6_udp')\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.1.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"1212:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.1.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"3434:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.1.1\",src=\"192.168.1.2\"', 'IPv6(dst=\"1212:910B:6666:3457:8295:3333:1800:2929\",src=\"3434:910A:2222:5498:8475:1111:3900:2020\"'))\n+ for element in mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz]\n+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv6_tcp_toeplitz = [eval(str(element).replace('gtp_psc / ipv4', 'gtp_psc / ipv6')\n+ .replace('ipv4 / tcp', 'ipv6 / tcp')\n+ .replace('ipv4-tcp', 'ipv6-tcp')\n+ .replace('ul_dl_ipv4_tcp', 'ul_dl_ipv6_tcp')\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.1.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"1212:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.1.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"3434:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.1.1\",src=\"192.168.1.2\"', 'IPv6(dst=\"1212:910B:6666:3457:8295:3333:1800:2929\",src=\"3434:910A:2222:5498:8475:1111:3900:2020\"'))\n+ for element in mac_ipv4_gtpu_eh_without_ul_dl_ipv4_tcp_toeplitz]\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_basic = 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)'\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+]\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src = eval(str(mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst)\n+ .replace('mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst', 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src')\n+ .replace('l3-dst-only', 'l3-src-only')\n+ .replace('check_hash_same', 'hash_check_different')\n+ .replace('check_hash_different', 'check_hash_same')\n+ .replace('hash_check_different', 'check_hash_different'))\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=22', 'sport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=23', 'dport=33').replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=22', 'sport=32').replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=22', 'sport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=23', 'dport=33').replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=22', 'sport=32')\n+ .replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=22', 'sport=32')\n+ .replace('192.168.0', '192.168.1'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=22', 'sport=32'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=23', 'dport=32')\n+ .replace('192.168.0', '192.168.1'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_all = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_all',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=22', 'sport=32'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_gtpu = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_gtpu',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types gtpu end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0', '192.168.1')\n+ .replace('sport=22', 'sport=32')\n+ .replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv4_udp_toeplitz = [mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst, mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src,\n+ mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4src, mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4dst,\n+ mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4src, mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4dst,\n+ mac_ipv4_gtpu_eh_dl_ipv4_udp_l4src, mac_ipv4_gtpu_eh_dl_ipv4_udp_l4dst,\n+ mac_ipv4_gtpu_eh_dl_ipv4_udp_all, mac_ipv4_gtpu_eh_dl_ipv4_udp_gtpu]\n+\n+mac_ipv4_gtpu_eh_ul_ipv4_udp_toeplitz = [eval(str(element).replace('(type=1', '(type=2')\n+ .replace('(type=0', '(type=1').replace('(type=2', '(type=0')\n+ .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')\n+ .replace('eh_dl', 'eh_ul'))\n+ for element in mac_ipv4_gtpu_eh_dl_ipv4_udp_toeplitz]\n+\n+mac_ipv4_gtpu_eh_ipv4_udp_toeplitz = mac_ipv4_gtpu_eh_dl_ipv4_udp_toeplitz + mac_ipv4_gtpu_eh_ul_ipv4_udp_toeplitz\n+\n+mac_ipv4_gtpu_eh_ipv4_tcp_toeplitz = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')\n+ .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')\n+ .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))\n+ for element in mac_ipv4_gtpu_eh_ipv4_udp_toeplitz]\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_basic = {\n+ 'ipv6-nonfrag': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'ipv6-frag': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+ 'ipv6-icmp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+ 'ipv6-udp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP()/(\"X\"*480)',\n+ 'ipv6-tcp': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP()/(\"X\"*480)',\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt = eval(str(mac_ipv4_gtpu_eh_dl_ipv6_basic).replace('ABAB', '1212'))\n+mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt = eval(str(mac_ipv4_gtpu_eh_dl_ipv6_basic).replace('CDCD', '3434'))\n+mac_ipv4_gtpu_eh_dl_ipv6_unmatched_pkt = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")/(\"X\"*480)',\n+]\n+mac_ipv4_gtpu_eh_dl_ipv6_l3dst_only = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_l3dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['ipv6-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['ipv6-nonfrag'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['ipv6-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['ipv6-frag'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['ipv6-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['ipv6-icmp'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['ipv6-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['ipv6-udp'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['ipv6-tcp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['ipv6-tcp'],\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_l3src_only = eval(str(mac_ipv4_gtpu_eh_dl_ipv6_l3dst_only)\n+ .replace('mac_ipv4_gtpu_eh_dl_ipv6_l3dst', 'mac_ipv4_gtpu_eh_dl_ipv6_l3src')\n+ .replace('l3-dst-only', 'l3-src-only')\n+ .replace('check_hash_same', 'hash_check_different')\n+ .replace('check_hash_different', 'check_hash_same')\n+ .replace('hash_check_different', 'check_hash_different'))\n+mac_ipv4_gtpu_eh_dl_ipv6_all = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_all',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['ipv6-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['ipv6-nonfrag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['ipv6-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['ipv6-frag'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['ipv6-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['ipv6-icmp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['ipv6-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['ipv6-udp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['ipv6-tcp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['ipv6-tcp'],\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'].replace('0x123456', '0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_gtpu = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_gtpu',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / end actions rss types gtpu end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'],\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'].replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'].replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_unmatched_pkt,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': [\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'],\n+ mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'],\n+ ],\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_toeplitz = [mac_ipv4_gtpu_eh_dl_ipv6_l3dst_only, mac_ipv4_gtpu_eh_dl_ipv6_l3src_only,\n+ mac_ipv4_gtpu_eh_dl_ipv6_all, mac_ipv4_gtpu_eh_dl_ipv6_gtpu]\n+\n+mac_ipv4_gtpu_eh_ul_ipv6_toeplitz = [eval(str(element).replace('(type=1', '(type=2')\n+ .replace('(type=0', '(type=1').replace('(type=2', '(type=0')\n+ .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')\n+ .replace('eh_dl', 'eh_ul'))\n+ for element in mac_ipv4_gtpu_eh_dl_ipv6_toeplitz]\n+\n+mac_ipv4_gtpu_eh_ipv6_toeplitz = mac_ipv4_gtpu_eh_dl_ipv6_toeplitz + mac_ipv4_gtpu_eh_ul_ipv6_toeplitz\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_basic = 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)'\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+]\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('ABAB', '1212'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src = eval(str(mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst)\n+ .replace('mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst', 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src')\n+ .replace('l3-dst-only', 'l3-src-only')\n+ .replace('check_hash_same', 'hash_check_different')\n+ .replace('check_hash_different', 'check_hash_same')\n+ .replace('hash_check_different', 'check_hash_different'))\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('ABAB', '1212'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=22', 'sport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=23', 'dport=33').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('ABAB', '1212'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=22', 'sport=32').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=22', 'sport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=23', 'dport=33').replace('ABAB', '1212'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=22', 'sport=32').replace('ABAB', '1212'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_l4dst = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l4dst',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=22', 'sport=32')\n+ .replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_l4src = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l4src',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=22', 'sport=32'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=23', 'dport=32')\n+ .replace('ABAB', '1212').replace('CDCD', '3434'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_all = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_all',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=22', 'sport=32'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('CDCD', '3434'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('ABAB', '1212'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_gtpu = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_gtpu',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types gtpu end key_len 0 queues end / end',\n+ 'test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('ABAB', '1212').replace('CDCD', '3434')\n+ .replace('sport=22', 'sport=32')\n+ .replace('dport=23', 'dport=33'),\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('teid=0x123456', 'teid=0x12345'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch,\n+ 'action': 'check_no_hash',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+ 'action': 'check_no_hash',\n+ },\n+ ]\n+}\n+\n+mac_ipv4_gtpu_eh_dl_ipv6_udp_toeplitz = [mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst, mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src,\n+ mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4src, mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4dst,\n+ mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4src, mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4dst,\n+ mac_ipv4_gtpu_eh_dl_ipv6_udp_l4src, mac_ipv4_gtpu_eh_dl_ipv6_udp_l4dst,\n+ mac_ipv4_gtpu_eh_dl_ipv6_udp_all, mac_ipv4_gtpu_eh_dl_ipv6_udp_gtpu]\n+mac_ipv4_gtpu_eh_ul_ipv6_udp_toeplitz = [eval(str(element).replace('(type=1', '(type=2')\n+ .replace('(type=0', '(type=1').replace('(type=2', '(type=0')\n+ .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')\n+ .replace('eh_dl', 'eh_ul'))\n+ for element in mac_ipv4_gtpu_eh_dl_ipv6_udp_toeplitz]\n+mac_ipv4_gtpu_eh_ipv6_udp_toeplitz = mac_ipv4_gtpu_eh_dl_ipv6_udp_toeplitz + mac_ipv4_gtpu_eh_ul_ipv6_udp_toeplitz\n+\n+mac_ipv4_gtpu_eh_ipv6_tcp_toeplitz = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')\n+ .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')\n+ .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))\n+ for element in mac_ipv4_gtpu_eh_ipv6_udp_toeplitz]\n+\n+default_pattern_ipv4_gtpu_eh_dl_ipv4_src = 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)'\n+default_pattern_ipv4_gtpu_eh_dl_ipv4_dst = 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)'\n+default_pattern_ipv4_gtpu_eh_dl_ipv6_src = 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)'\n+default_pattern_ipv4_gtpu_eh_dl_ipv6_dst = 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)'\n+default_pattern_support_ipv4 = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_gtpu',\n+ 'port_id': 0,\n+ 'rule': '',\n+ 'test': [\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst,\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src.replace('(type=0', '(type=1'),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('(type=0', '(type=1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src.replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"'),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src\n+ .replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"')\n+ .replace('(type=0', '(type=1'),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst\n+ .replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"')\n+ .replace('(type=0', '(type=1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src.replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"'),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src\n+ .replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"')\n+ .replace('(type=0', '(type=1'),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst\n+ .replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"')\n+ .replace('(type=0', '(type=1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src\n+ .replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"')\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst\n+ .replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"')\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src\n+ .replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"')\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst\n+ .replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"')\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src,\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst,\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src.replace('(type=0', '(type=1'),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('(type=0', '(type=1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src.replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"'),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src\n+ .replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"')\n+ .replace('(type=0', '(type=1'),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst\n+ .replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"')\n+ .replace('(type=0', '(type=1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src.replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"'),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src\n+ .replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"')\n+ .replace('(type=0', '(type=1'),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst\n+ .replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"')\n+ .replace('(type=0', '(type=1'),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src\n+ .replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"')\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst\n+ .replace('/(\"X\"', '/UDP(sport=22,dport=23)/(\"X\"')\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src\n+ .replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"')\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst\n+ .replace('/(\"X\"', '/TCP(sport=22,dport=23)/(\"X\"')\n+ .replace('/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) ', ''),\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+}\n+\n+inner_l4_mac_ipv4_gtpu_ipv4_udp_tcp = {\n+ 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_tcp',\n+ 'port_id': 0,\n+ 'rule': [\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end',\n+ ],\n+ 'test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ ]\n+}\n+inner_l4_mac_ipv6_gtpu_ipv4_udp_tcp = eval(str(inner_l4_mac_ipv4_gtpu_ipv4_udp_tcp)\n+ .replace('eth / ipv4', 'eth / ipv6')\n+ .replace('gtpu / ipv4', 'gtpu / gtp_psc / ipv4')\n+ .replace('IP()', 'IPv6()')\n+ .replace('teid=0x123456)', 'teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) ')\n+ .replace('mac_ipv4', 'mac_ipv6'))\n+inner_l4_mac_ipv4_gtpu_eh_ipv6_udp_tcp = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_ipv6_udp_tcp',\n+ 'port_id': 0,\n+ 'rule': [\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end',\n+ ],\n+ 'test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ ]\n+}\n+inner_l4_mac_ipv6_gtpu_eh_ipv6_udp_tcp = eval(str(inner_l4_mac_ipv4_gtpu_eh_ipv6_udp_tcp)\n+ .replace('eth / ipv4', 'eth / ipv6')\n+ .replace('pdu_t is 0', 'pdu_t is 1')\n+ .replace('(type=0', '(type=1')\n+ .replace('IP()', 'IPv6()')\n+ .replace('mac_ipv4', 'mac_ipv6'))\n+inner_l4_protocal_hash = [inner_l4_mac_ipv4_gtpu_ipv4_udp_tcp, inner_l4_mac_ipv6_gtpu_ipv4_udp_tcp,\n+ inner_l4_mac_ipv4_gtpu_eh_ipv6_udp_tcp, inner_l4_mac_ipv6_gtpu_eh_ipv6_udp_tcp]\n+\n+mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',\n+ 'pre-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\",frag=6)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\",frag=6)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': {'save_hash': 'ipv4-nonfrag'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\",frag=6)/(\"X\"*480)',\n+ 'action': {'save_hash': 'ipv4-frag'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\",frag=6)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'action': {'save_hash': 'ipv4-icmp'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'action': {'check_no_hash_or_different': 'ipv4-nonfrag'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\",frag=6)/(\"X\"*480)',\n+ 'action': {'check_no_hash_or_different': 'ipv4-frag'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+ 'action': {'check_no_hash_or_different': 'ipv4-icmp'},\n+ },\n+ ],\n+}\n+\n+mac_ipv4_gtpu_eh_ipv6_without_ul_dl_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric)\n+ .replace('gtp_psc / ipv4', 'gtp_psc / ipv6')\n+ .replace('types ipv4', 'types ipv6')\n+ .replace('gtpu_eh_ipv4', 'gtpu_eh_ipv6')\n+ .replace(',frag=6)', ')/IPv6ExtHdrFragment()')\n+ .replace('IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"','IP(dst=\"192.168.1.1\", src=\"192.168.1.2\"',)\n+ .replace('IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"','IP(src=\"192.168.1.1\", dst=\"192.168.1.2\"',)\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.2\",src=\"192.168.0.1\"', 'IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\"')\n+ )\n+\n+mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end',\n+ 'pre-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': {'save_hash', 'udp-dl'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': {'save_hash', 'udp-ul'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': {'check_hash_different', 'udp-dl'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': {'check_hash_different', 'udp-ul'},\n+ },\n+ ],\n+}\n+mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric)\n+ .replace('gtp_psc / ipv4', 'gtp_psc / ipv6')\n+ .replace('types ipv4', 'types ipv6')\n+ .replace('gtpu_eh_ipv4', 'gtpu_eh_ipv6')\n+ .replace('IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"','IP(dst=\"192.168.1.1\", src=\"192.168.1.2\"',)\n+ .replace('IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"','IP(src=\"192.168.1.1\", dst=\"192.168.1.2\"',)\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.2\",src=\"192.168.0.1\"', 'IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\"')\n+ )\n+\n+mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric = {\n+ 'sub_casename': 'mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric',\n+ 'port_id': 0,\n+ 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_len 0 queues end / end',\n+ 'pre-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': {'save_hash', 'udp-dl'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': {'save_hash', 'udp-ul'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_same',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': 'save_hash',\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=23, dport=22)/(\"X\"*480)',\n+ 'action': 'check_hash_different',\n+ },\n+ ],\n+ 'post-test': [\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': {'check_hash_different', 'udp-dl'},\n+ },\n+ {\n+ 'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'action': {'check_hash_different', 'udp-ul'},\n+ },\n+ ],\n+}\n+\n+mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric)\n+ .replace('gtp_psc / ipv4', 'gtp_psc / ipv6')\n+ .replace('types ipv4', 'types ipv6')\n+ .replace('gtpu_eh_ipv4', 'gtpu_eh_ipv6')\n+ .replace('IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"','IP(dst=\"192.168.1.1\", src=\"192.168.1.2\"',)\n+ .replace('IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"','IP(src=\"192.168.1.1\", dst=\"192.168.1.2\"',)\n+ .replace('IP(dst=\"192.168.0.1\",src=\"192.168.0.2\"', 'IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\"')\n+ .replace('IP(dst=\"192.168.0.2\",src=\"192.168.0.1\"', 'IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\"')\n+ )\n+\n+\n+class TestCVLAdvancedRSSGTPU(TestCase):\n+\n+ def set_up_all(self):\n+ \"\"\"\n+ Run at the start of each test suite.\n+ prerequisites.\n+ \"\"\"\n+ # Based on h/w type, choose how many ports to use\n+ self.dut_ports = self.dut.get_ports(self.nic)\n+ self.verify(len(self.dut_ports) >= 2, \"Insufficient ports for testing\")\n+ # Verify that enough threads are available\n+ cores = self.dut.get_core_list(\"1S/4C/1T\")\n+ self.verify(cores is not None, \"Insufficient cores for speed testing\")\n+ self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])\n+ self.tester_port0 = self.tester.get_local_port(self.dut_ports[0])\n+ self.tester_port1 = self.tester.get_local_port(self.dut_ports[1])\n+ self.tester_iface0 = self.tester.get_interface(self.tester_port0)\n+ self.tester_iface1 = self.tester.get_interface(self.tester_port1)\n+ self.pci0 = self.dut.ports_info[self.dut_ports[0]]['pci']\n+ self.pci1 = self.dut.ports_info[self.dut_ports[1]]['pci']\n+ self.pass_flag = 'passed'\n+ self.fail_flag = 'failed'\n+\n+ self.pkt = Packet()\n+ self.pmd_output = PmdOutput(self.dut)\n+ self.launch_testpmd()\n+ self.enable_rss = False\n+ self.rxq = 64\n+ self.rssprocess = RssProcessing(self, self.pmd_output, [self.tester_iface0, self.tester_iface1], self.rxq)\n+ self.logger.info('rssprocess.tester_ifaces: {}'.format(self.rssprocess.tester_ifaces))\n+ self.logger.info('rssprocess.test_case: {}'.format(self.rssprocess.test_case))\n+\n+ def set_up(self):\n+ \"\"\"\n+ Run before each test case.\n+ \"\"\"\n+ pass\n+\n+ def launch_testpmd(self, enable_rss=False, set_rss=None):\n+ if enable_rss:\n+ param = \"--rxq=64 --txq=64\"\n+ else:\n+ param = \"--rxq=64 --txq=64 --disable-rss --rxd=384 --txd=384\"\n+ self.pmd_output.start_testpmd(cores=\"1S/4C/1T\", param=param,\n+ eal_param=f\"-w {self.pci0}\", socket=self.ports_socket)\n+ self.enable_rss = enable_rss\n+ if set_rss:\n+ self.pmd_output.execute_cmd('port config all rss all')\n+ self.pmd_output.execute_cmd(\"set fwd rxonly\")\n+ self.pmd_output.execute_cmd(\"set verbose 1\")\n+ res = self.pmd_output.wait_link_status_up('all', timeout=15)\n+ self.verify(res is True, 'there have port link is down')\n+\n+ def switch_testpmd(self, enable_rss=True, set_rss=False):\n+ if enable_rss != self.enable_rss:\n+ self.pmd_output.quit()\n+ self.launch_testpmd(enable_rss=enable_rss, set_rss=set_rss)\n+ self.pmd_output.execute_cmd(\"start\")\n+ if set_rss:\n+ self.pmd_output.execute_cmd('port config all rss all')\n+\n+ def test_mac_ipv4_gtpu_ipv4(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_ipv4_udp(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_udp_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_ipv4_tcp(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_tcp_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_ipv6(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_ipv6_udp(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_udp_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_ipv6_tcp(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_tcp_toeplitz)\n+\n+ def test_mac_ipv6_gtpu_ipv4(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_ipv4_udp(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_udp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_ipv4_tcp(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_tcp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_ipv6(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_ipv6_udp(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_udp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_ipv6_tcp(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_tcp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4_udp(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_udp_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4_tcp(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_tcp_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6_udp(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_udp_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6_tcp(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_tcp_toeplitz)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4_udp(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_udp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4_tcp(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_tcp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6_udp(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_udp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6_tcp(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_tcp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4_without_ul_dl(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv4_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv4_tcp_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6_without_ul_dl(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv6_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv6_udp_toeplitz)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl(self):\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv6_tcp_toeplitz)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4_without_ul_dl(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4_udp_without_ul_dl(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4_tcp_without_ul_dl(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_tcp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6_without_ul_dl(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv6_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6_udp_without_ul_dl(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv6_udp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6_tcp_without_ul_dl(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv6_tcp_toeplitz)\n+ self.switch_testpmd(enable_rss=False)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv4_gtpu_ipv4_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_symmetric)\n+\n+ def test_mac_ipv4_gtpu_ipv4_udp_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_udp_symmetric)\n+\n+ def test_mac_ipv4_gtpu_ipv4_tcp_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_tcp_symmetric)\n+\n+ def test_mac_ipv4_gtpu_ipv6_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_symmetric)\n+\n+ def test_mac_ipv4_gtpu_ipv6_udp_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_udp_symmetric)\n+\n+ def test_mac_ipv4_gtpu_ipv6_tcp_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_tcp_symmetric)\n+\n+ def test_mac_ipv6_gtpu_ipv4_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_ipv4_udp_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_udp_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_ipv4_tcp_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_tcp_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_ipv6_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_ipv6_udp_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_udp_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_ipv6_tcp_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_tcp_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4_symmetric(self):\n+ self.switch_testpmd(enable_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_symmetric)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4_udp_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_udp_symmetric)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4_tcp_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_tcp_symmetric)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6_symmetric(self):\n+ self.switch_testpmd(enable_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_symmetric)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6_udp_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_udp_symmetric)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6_tcp_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_tcp_symmetric)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_symmetric)\n+ self.switch_testpmd(enable_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4_udp_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_udp_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4_tcp_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_tcp_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_symmetric)\n+ self.switch_testpmd(enable_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6_udp_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_udp_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6_tcp_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_tcp_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric(self):\n+ self.switch_testpmd(enable_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6_without_ul_dl_symmetric(self):\n+ self.switch_testpmd(enable_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_without_ul_dl_symmetric)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl_symmetric)\n+\n+ def test_mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric(self):\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4_without_ul_dl_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric)\n+ self.switch_testpmd(enable_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4_udp_without_ul_dl_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6_without_ul_dl_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_without_ul_dl_symmetric)\n+ self.switch_testpmd(enable_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6_udp_without_ul_dl_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_mac_ipv6_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric(self):\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric)\n+ self.switch_testpmd(enable_rss=True, set_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+ def test_inner_l4_protocal_hash(self):\n+ self.switch_testpmd(enable_rss=True)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=inner_l4_protocal_hash)\n+\n+ def test_default_pattern_support(self):\n+ self.switch_testpmd(enable_rss=True)\n+ ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(default_pattern_support_ipv4)\n+ self.rssprocess.handle_rss_distribute_cases(cases_info=[default_pattern_support_ipv4] + ipv6_template)\n+\n+ def test_negative_cases(self):\n+ negative_rules = [\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types udp end key_len 0 queues end / end']\n+ self.rssprocess.create_rule(rule=negative_rules, check_stats=False, msg=\"Invalid input pattern: Invalid argument\")\n+\n+ def test_symmetric_negative_cases(self):\n+ rules = [\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss func symmetric_toeplitz types gtpu end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss func symmetric_toeplitz types ipv4 l3-dst-only end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types tcp end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp l3-src-only end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp l4-dst-only end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end']\n+ self.rssprocess.create_rule(rule=rules, check_stats=False)\n+\n+ def test_global_simple_xor(self):\n+ self.switch_testpmd()\n+ rule1 = 'flow create 0 ingress pattern end actions rss func simple_xor key_len 0 queues end / end'\n+ rule_li1 = self.rssprocess.create_rule(rule=rule1)\n+ pkts1 = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"1.1.4.1\",dst=\"2.2.2.3\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"2.2.2.3\",dst=\"1.1.4.1\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/(\"X\" * 80)',\n+ 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\" * 80)',\n+ 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/UDP(sport=22, dport=23)/(\"X\" * 80)',\n+ 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22, dport=23)/(\"X\" * 80)', ]\n+ output = self.rssprocess.send_pkt_get_output(pkts=pkts1)\n+ hash_values, rss_distribute = self.rssprocess.get_hash_verify_rss_distribute(output)\n+ for i in range(0, len(hash_values), 2):\n+ self.verify(hash_values[i] == hash_values[i + 1],\n+ 'the pair of packets with switched l3 address should have same hash value')\n+ rule2 = [\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end']\n+ rule_li2 = self.rssprocess.create_rule(rule=rule2)\n+ pkts2 = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=23, dport=22)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/UDP(sport=22, dport=23)/(\"X\" * 80)',\n+ 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/UDP(sport=23, dport=22)/(\"X\" * 80)', ]\n+ output = self.rssprocess.send_pkt_get_output(pkts=pkts2)\n+ hash_values, rss_distribute = self.rssprocess.get_hash_verify_rss_distribute(output)\n+ for i in range(0, len(hash_values), 2):\n+ self.verify(hash_values[i] != hash_values[i + 1],\n+ 'the packets with switched l4 port should have different hash values.')\n+ self.pmd_output.execute_cmd('flow destroy 0 rule 0')\n+ output = self.rssprocess.send_pkt_get_output(pkts=pkts1)\n+ hash_values, rss_distribute = self.rssprocess.get_hash_verify_rss_distribute(output)\n+ for i in range(0, len(hash_values), 2):\n+ self.verify(hash_values[i] != hash_values[i + 1],\n+ 'the pair of packets with switched l3 address should have defferent hash value')\n+ output = self.rssprocess.send_pkt_get_output(pkts=pkts2)\n+ hash_values, rss_distribute = self.rssprocess.get_hash_verify_rss_distribute(output)\n+ for i in range(0, len(hash_values), 2):\n+ self.verify(hash_values[i] != hash_values[i + 1],\n+ 'the packets with switched l4 port should have different hash values.')\n+ self.pmd_output.execute_cmd('flow flush 0')\n+ output = self.rssprocess.send_pkt_get_output(pkts=pkts1)\n+ hash_values, rss_distribute = self.rssprocess.get_hash_verify_rss_distribute(output)\n+ for i in range(0, len(hash_values), 2):\n+ self.verify(hash_values[i] != hash_values[i + 1],\n+ 'the pair of packets with switched l3 address should have defferent hash value')\n+ output = self.rssprocess.send_pkt_get_output(pkts=pkts2)\n+ hash_values, rss_distribute = self.rssprocess.get_hash_verify_rss_distribute(output)\n+ for i in range(0, len(hash_values), 2):\n+ self.verify(hash_values[i] == hash_values[i + 1],\n+ 'the packets with switched l4 port should have same hash values.')\n+\n+ def test_rss_function_when_disable_rss(self):\n+ self.switch_testpmd(False)\n+ rule = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end'\n+ self.rssprocess.create_rule(rule=rule)\n+ pkt = 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=RandIP(),src=RandIP())/UDP(sport=RandShort(),dport=RandShort())/(\"X\"*480)'\n+ output = self.rssprocess.send_pkt_get_output(pkts=pkt, count=1280)\n+ hashes, rss_distribute = self.rssprocess.get_hash_verify_rss_distribute(output)\n+ self.verify(len(hashes) == 1280,\n+ 'all the packets should have hash value and distributed to all queues by RSS.')\n+ self.verify(rss_distribute, 'the packet do not distribute by rss')\n+\n+ def test_stress_cases(self):\n+ # Subcase: add/delete IPV4_GTPU_UL_IPV4_TCP rules\n+ self.switch_testpmd(enable_rss=True)\n+ rule1 = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end'\n+ for _ in range(100):\n+ self.pmd_output.execute_cmd(rule1)\n+ self.pmd_output.execute_cmd('flow destroy 0 rule 0')\n+ rule_li = self.rssprocess.create_rule(rule=rule1)\n+ out = self.pmd_output.execute_cmd('flow list 0')\n+ p = re.compile(\"^(\\d+)\\s\")\n+ li = out.splitlines()\n+ res = list(filter(bool, list(map(p.match, li))))\n+ result = [i.group(1) for i in res]\n+ self.verify(result == rule_li, 'should only rule 0 existed')\n+ pkts1 = [\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=\"192.168.1.1\", dst=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/TCP(sport=32, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.1.2\")/TCP(sport=22, dport=33)/(\"X\"*480)', ]\n+ output = self.rssprocess.send_pkt_get_output(pkts=pkts1)\n+ hash_values1, rss_distribute = self.rssprocess.get_hash_verify_rss_distribute(output)\n+ self.verify(hash_values1[1] != hash_values1[0] and hash_values1[2] != hash_values1[0] and hash_values1[3] ==\n+ hash_values1[0],\n+ 'packet 2 and packet 3 should have different hash value with packet 1, packet 4 should has same hash value with packet 1.')\n+ self.pmd_output.execute_cmd('flow flush 0')\n+ # Subcase: add/delete IPV4_GTPU_DL_IPV4 rules\n+ rule2 = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end'\n+ for _ in range(100):\n+ self.pmd_output.execute_cmd(rule2)\n+ self.pmd_output.execute_cmd('flow destroy 0 rule 0')\n+ rule_li = self.rssprocess.create_rule(rule=rule2)\n+ out = self.pmd_output.execute_cmd('flow list 0')\n+ p = re.compile(\"^(\\d+)\\s\")\n+ li = out.splitlines()\n+ res = list(filter(bool, list(map(p.match, li))))\n+ result = [i.group(1) for i in res]\n+ self.verify(result == rule_li, 'should only rule 0 existed')\n+ pkts2 = [\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.1.1\", dst=\"192.168.0.2\")/(\"X\"*480)', ]\n+ output = self.rssprocess.send_pkt_get_output(pkts=pkts2)\n+ hash_values2, rss_distribute = self.rssprocess.get_hash_verify_rss_distribute(output)\n+ self.verify(hash_values2[1] != hash_values2[0] and hash_values2[2] == hash_values2[0],\n+ 'packet 2 should has different hash value with packet 1, packet 3 should has same hash value with packet 1.')\n+\n+ def test_ipv4_gtpu_ipv4_ipv4_gtpu_eh_ipv4(self):\n+ self.switch_testpmd(enable_rss=True)\n+ rules = [\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end'\n+ ]\n+ pkts1 = [\n+ [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)', ],\n+ [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)', ],\n+ [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)', ]\n+ ]\n+\n+ pkts2 = [\n+ [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)', ],\n+ [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)', ],\n+ [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)', ]\n+ ]\n+ rule_li1 = self.rssprocess.create_rule(rule=rules[0])\n+ hash_value1, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1[0])\n+ self.verify(hash_value1[0] == hash_value1[1] and hash_value1[0] != hash_value1[2],\n+ 'got wrong hash, expect 1st hash equal to 2nd and different with 3rd')\n+ hash_value2, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1[1])\n+ self.verify(len(set(hash_value2)) == len(pkts1[1]), 'hash wrong, expect all hash value are different')\n+ hash_value3, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1[2])\n+ self.verify(len(set(hash_value3)) == len(pkts1[2]), 'hash wrong, expect all hash value are different')\n+\n+ rule_li2 = self.rssprocess.create_rule(rule=rules[1])\n+ hash_value1, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[0])\n+ self.verify(hash_value1[0] == hash_value1[1] and hash_value1[0] != hash_value1[2],\n+ 'got wrong hash, expect 1st hash equal to 2nd and different with 3rd')\n+ hash_value2, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[1])\n+ self.verify(hash_value2[0] != hash_value2[1] and hash_value2[0] == hash_value2[2],\n+ 'got wrong hash, expect 1st hash equal to 3rd and different with 2nd')\n+ hash_value3, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[2])\n+ self.verify(hash_value3[0] != hash_value3[1] and hash_value3[0] == hash_value3[2],\n+ 'got wrong hash, expect 1st hash equal to 3rd and different with 2nd')\n+\n+ self.rssprocess.destroy_rule(port_id=0, rule_id=rule_li1)\n+ hash_value1, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[0])\n+ self.verify(all([i == '0' for i in hash_value1]),\n+ 'got wrong hash, expect not got rss hash and distribute to queue 0')\n+ hash_value2, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[1])\n+ self.verify(hash_value2[0] != hash_value2[1] and hash_value2[0] == hash_value2[2],\n+ 'got wrong hash, expect 1st hash equal to 3rd and different with 2nd')\n+ hash_value3, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[2])\n+ self.verify(hash_value3[0] != hash_value3[1] and hash_value3[0] == hash_value3[2],\n+ 'got wrong hash, expect 1st hash equal to 3rd and different with 2nd')\n+\n+ self.rssprocess.create_rule(rule=rules[0])\n+ hash_value1, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[0])\n+ self.verify(hash_value1[0] == hash_value1[1] and hash_value1[0] != hash_value1[2],\n+ 'got wrong hash, expect 1st hash equal to 2nd and different with 3rd')\n+ hash_value2, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[1])\n+ self.verify(hash_value2[0] != hash_value2[1] and hash_value2[0] == hash_value2[2],\n+ 'got wrong hash, expect 1st hash equal to 3rd and different with 2nd')\n+ hash_value3, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[2])\n+ self.verify(hash_value3[0] != hash_value3[1] and hash_value3[0] == hash_value3[2],\n+ 'got wrong hash, expect 1st hash equal to 3rd and different with 2nd')\n+\n+ self.rssprocess.destroy_rule(port_id=0, rule_id=rule_li2)\n+ hash_value1, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[0])\n+ self.verify(hash_value1[0] == hash_value1[1] and hash_value1[0] != hash_value1[2],\n+ 'got wrong hash, expect 1st hash equal to 2nd and different with 3rd')\n+ hash_value2, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[1] + pkts2[2])\n+ self.verify(all([i == '0' for i in hash_value2]),\n+ 'got wrong hash, expect not got rss hash and distribute to queue 0')\n+\n+ def test_ipv4_gtpu_eh_ipv4_with_without_ul_dl(self):\n+ self.switch_testpmd(enable_rss=True)\n+ rules = [\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end']\n+ pkts1 = [\n+ [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ ],\n+ [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ ]\n+ ]\n+\n+ pkts2 = [\n+ [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)', ],\n+ [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)', ]\n+ ]\n+ rule_li1 = self.rssprocess.create_rule(rule=rules[0])\n+ hash_value1, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1[0])\n+ self.verify(hash_value1[0] == hash_value1[1] and hash_value1[0] != hash_value1[2],\n+ 'got wrong hash, expect 1st hash equal to 2nd and different with 3rd')\n+ hash_value2, queues = self.rssprocess.send_pkt_get_hash_queues(pkts1[1])\n+ self.verify(len(set(hash_value2)) == len(pkts1[1]), 'hash wrong, expect all hash value are different')\n+\n+ rule_li2 = self.rssprocess.create_rule(rule=rules[1])\n+ hash_value1, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[0])\n+ self.verify(hash_value1[0] != hash_value1[1] and hash_value1[0] == hash_value1[2],\n+ 'got wrong hash, expect 1st hash equal to 3rd and different with 2nd')\n+ hash_value2, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2[1])\n+ self.verify(hash_value2[0] != hash_value2[1] and hash_value2[0] == hash_value2[2],\n+ 'got wrong hash, expect 1st hash equal to 3rd and different with 2nd')\n+\n+ self.rssprocess.destroy_rule(port_id=0, rule_id=rule_li2)\n+ hash_value1, queues = self.rssprocess.send_pkt_get_hash_queues(pkts2[0] + pkts2[1])\n+ self.verify(all([i == '0' for i in hash_value1]),\n+ 'got wrong hash, expect not got rss hash and distribute to queue 0')\n+\n+ def test_ipv4_gtpu_eh_ipv4_without_with_ul_dl(self):\n+ self.switch_testpmd(enable_rss=True)\n+ rules = [\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',\n+ 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end']\n+ pkts1 = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)', ]\n+ rule0 = self.rssprocess.create_rule(rules[0])\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] == hash_values[0], 'packet 2 should has same hash value with packet 1')\n+ self.verify(hash_values[2] != hash_values[0], 'packet 3 should has different hash value with packet 1')\n+ self.verify(hash_values[4] == hash_values[3], 'packet 5 should has same hash value with packet 4')\n+ self.verify(hash_values[5] != hash_values[3], 'packet 6 should has different hash value with packet 4')\n+\n+ rule1 = self.rssprocess.create_rule(rules[1])\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] == hash_values[0], 'packet 2 should has same hash value with packet 1')\n+ self.verify(hash_values[2] != hash_values[0], 'packet 3 should has different hash value with packet 1')\n+ self.verify(hash_values[4] != hash_values[3], 'packet 5 should has different hash value with packet 4')\n+ self.verify(hash_values[5] == hash_values[3], 'packet 6 should has same hash value with packet 4')\n+\n+ self.rssprocess.destroy_rule(port_id=0, rule_id=rule0)\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts1[3:])\n+ self.verify(hash_values[1] != hash_values[0], 'should get different hash values')\n+ self.verify(hash_values[2] == hash_values[0], 'should get same hash values')\n+\n+ rule2 = self.rssprocess.create_rule(rules[0])\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts1)\n+ self.verify(hash_values[1] == hash_values[0], 'packet 2 should has same hash value with packet 1')\n+ self.verify(hash_values[2] != hash_values[0], 'packet 3 should has different hash value with packet 1')\n+ self.verify(hash_values[4] == hash_values[3], 'packet 5 should has same hash value with packet 4')\n+ self.verify(hash_values[5] != hash_values[3], 'packet 6 should has different hash value with packet 4')\n+\n+ self.rssprocess.destroy_rule(port_id=0, rule_id=rule2)\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts1)\n+ self.verify(all([i == '0' for i in hash_values]), 'all pkts should has no hash value and distribute to queue 0')\n+\n+ def test_ipv4_gtpu_eh_ipv4_and_ipv4_gtpu_eh_ipv4_udp_tcp(self):\n+ self.switch_testpmd(enable_rss=True)\n+ pkts1 = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)', ]\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] == hash_values[0], 'packet 2 should has same hash value with packet 1')\n+ self.verify(hash_values[2] != hash_values[0], 'packet 3 should has different hash value with packet 1')\n+ self.verify(hash_values[4] == hash_values[3], 'packet 5 should has same hash value with packet 4')\n+ self.verify(hash_values[5] != hash_values[3], 'packet 6 should has different hash value with packet 4')\n+ self.verify(hash_values[7] != hash_values[6], 'packet 8 should has different hash value to packet 7')\n+ self.verify(hash_values[8] != hash_values[6] and hash_values[8] != hash_values[7],\n+ 'packet 9 should have different hash value to packet 7 and 8')\n+ self.verify(hash_values[10] != hash_values[9], 'packet 11 should has different hash value to packet 10')\n+ self.verify(hash_values[11] != hash_values[9] and hash_values[11] != hash_values[10],\n+ 'packet 12 have different hash value to packet 10 and 11')\n+ rule1 = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end'\n+ rule_li1 = self.rssprocess.create_rule(rule=rule1)\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] == hash_values[0], 'packet 2 should has same hash value with packet 1')\n+ self.verify(hash_values[2] != hash_values[0], 'packet 3 should has different hash value with packet 1')\n+ self.verify(hash_values[4] != hash_values[3], 'packet 5 should has different hash value with packet 4')\n+ self.verify(hash_values[5] == hash_values[3], 'packet 6 should has same hash value with packet 4')\n+ self.verify(hash_values[7] != hash_values[6], 'packet 8 should has different hash value to packet 7')\n+ self.verify(hash_values[8] != hash_values[6] and hash_values[8] != hash_values[7],\n+ 'packet 9 should have different hash value to packet 7 and 8')\n+ self.verify(hash_values[10] != hash_values[9], 'packet 11 should has different hash value to packet 10')\n+ self.verify(hash_values[11] != hash_values[9] and hash_values[11] != hash_values[10],\n+ 'packet 12 have different hash value to packet 10 and 11')\n+ rule2 = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end'\n+ rule_li2 = self.rssprocess.create_rule(rule=rule2)\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] == hash_values[0], 'packet 2 should has same hash value with packet 1')\n+ self.verify(hash_values[2] == hash_values[0], 'packet 3 should has same hash value with packet 1')\n+ self.verify(hash_values[4] != hash_values[3], 'packet 5 should has different hash value with packet 4')\n+ self.verify(hash_values[5] == hash_values[3], 'packet 6 should has same hash value with packet 4')\n+ self.verify(hash_values[7] != hash_values[6], 'packet 8 should has different hash value to packet 7')\n+ self.verify(hash_values[8] != hash_values[6] and hash_values[8] != hash_values[7],\n+ 'packet 9 should have different hash value to packet 7 and 8')\n+ self.verify(hash_values[10] != hash_values[9], 'packet 11 should has different hash value to packet 10')\n+ self.verify(hash_values[11] == hash_values[9],\n+ 'packet 12 have same hash value to packet 10')\n+\n+ def test_ipv6_gtpu_eh_ipv6_and_ipv6_gtpu_eh_ipv6_udp_tcp(self):\n+ self.switch_testpmd(enable_rss=True)\n+ pkts1 = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)', ]\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] == hash_values[0], 'packet 2 should has same hash value with packet 1')\n+ self.verify(hash_values[2] != hash_values[0], 'packet 3 should has different hash value with packet 1')\n+ self.verify(hash_values[4] == hash_values[3], 'packet 5 should has same hash value with packet 4')\n+ self.verify(hash_values[5] != hash_values[3], 'packet 6 should has different hash value with packet 4')\n+ self.verify(hash_values[7] != hash_values[6], 'packet 8 should has different hash value to packet 7')\n+ self.verify(hash_values[8] != hash_values[6] and hash_values[8] != hash_values[7],\n+ 'packet 9 should have different hash value to packet 7 and 8')\n+ self.verify(hash_values[10] != hash_values[9], 'packet 11 should has different hash value to packet 10')\n+ self.verify(hash_values[11] != hash_values[9] and hash_values[11] != hash_values[10],\n+ 'packet 12 have different hash value to packet 10 and 11')\n+ rule1 = 'flow create 0 ingress pattern eth / ipv6 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / tcp / end actions rss types ipv6-tcp l4-dst-only end key_len 0 queues end / end'\n+ rule_li1 = self.rssprocess.create_rule(rule=rule1)\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] != hash_values[0], 'packet 2 should has different hash value with packet 1')\n+ self.verify(hash_values[2] == hash_values[0], 'packet 3 should has same hash value with packet 1')\n+ self.verify(hash_values[4] == hash_values[3], 'packet 5 should has same hash value with packet 4')\n+ self.verify(hash_values[5] != hash_values[3], 'packet 6 should has different hash value with packet 4')\n+ self.verify(hash_values[7] != hash_values[6], 'packet 8 should has different hash value to packet 7')\n+ self.verify(hash_values[8] != hash_values[6] and hash_values[8] != hash_values[7],\n+ 'packet 9 should have different hash value to packet 7 and 8')\n+ self.verify(hash_values[10] != hash_values[9], 'packet 11 should has different hash value to packet 10')\n+ self.verify(hash_values[11] != hash_values[9] and hash_values[11] != hash_values[10],\n+ 'packet 12 have different hash value to packet 10 and 11')\n+ rule2 = 'flow create 0 ingress pattern eth / ipv6 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end'\n+ rule_li2 = self.rssprocess.create_rule(rule=rule2)\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] == hash_values[0], 'packet 2 should has same hash value with packet 1')\n+ self.verify(hash_values[2] != hash_values[0], 'packet 3 should has different hash value with packet 1')\n+ self.verify(hash_values[4] == hash_values[3], 'packet 5 should has same hash value with packet 4')\n+ self.verify(hash_values[5] != hash_values[3], 'packet 6 should has different hash value with packet 4')\n+ self.verify(hash_values[7] == hash_values[6], 'packet 8 should has same hash value to packet 7')\n+ self.verify(hash_values[8] != hash_values[6],\n+ 'packet 9 should have different hash value to packet 7')\n+ self.verify(hash_values[10] != hash_values[9], 'packet 11 should has different hash value to packet 10')\n+ self.verify(hash_values[11] != hash_values[9] and hash_values[11] != hash_values[10],\n+ 'packet 12 have different hash value to packet 10 and 11')\n+\n+ def test_ipv4_gtpu_eh_ipv6_and_ipv4_gtpu_eh_ipv6_udp_tcp_without_ul_dl(self):\n+ self.switch_testpmd(enable_rss=True)\n+ pkts1 = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)', ]\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] == hash_values[0], 'packet 2 should has same hash value with packet 1')\n+ self.verify(hash_values[2] != hash_values[0] and hash_values[3] != hash_values[0],\n+ 'packet 3 and packet 4 should have different hash value to packet 1.')\n+ self.verify(len({hash_values[4], hash_values[5], hash_values[6]}) == 3,\n+ 'packet 5 and packet 6 and packet 7 have different hash value.')\n+ rule1 = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end'\n+ self.rssprocess.create_rule(rule=rule1)\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] == hash_values[0] and hash_values[2] == hash_values[0],\n+ 'packet 2 should has same hash value with packet 1, packet 3 should has same hash value to packet 1')\n+ self.verify(hash_values[3] != hash_values[0], 'packet 4 should have different hash value to packet 1.')\n+ self.verify(hash_values[5] == hash_values[4], 'packet 6 should has same hash value to packet 5.')\n+ self.verify(hash_values[6] != hash_values[4], 'packet 7 should has differnt hash value to packet 5.')\n+\n+ def test_ipv6_gtpu_ipv4_and_ipv6_gtpu_ipv4_udp_tcp(self):\n+ self.switch_testpmd(enable_rss=True)\n+ pkts1 = [\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\",src=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.1.1\",src=\"192.168.0.2\")/(\"X\"*480)', ]\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] == hash_values[0],\n+ 'packet 2 should has same hash value with packet 1')\n+ self.verify(hash_values[2] != hash_values[0] and hash_values[3] != hash_values[0],\n+ 'packet 3 and packet 4 should have different hash value to packet 1.')\n+ self.verify(len({hash_values[4], hash_values[5], hash_values[6]}) == 3,\n+ 'packet 5 and packet 6 and packet 7 have different hash value.')\n+ self.rssprocess.create_rule(\n+ rule='flow create 0 ingress pattern eth / ipv6 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end')\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] != hash_values[0],\n+ 'packet 2 should has defferent hash value with packet 1')\n+ self.verify(hash_values[2] == hash_values[0] and hash_values[3] == hash_values[0],\n+ 'packet 3 and packet 4 should have same hash value to packet 1.')\n+ self.verify(len({hash_values[4], hash_values[5], hash_values[6]}) == 3,\n+ 'packet 5 and packet 6 and packet 7 have different hash value.')\n+ self.rssprocess.create_rule(\n+ rule='flow create 0 ingress pattern eth / ipv6 / udp / gtpu / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end')\n+ hash_values, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+ self.verify(hash_values[1] == hash_values[0],\n+ 'packet 2 should has same hash value with packet 1')\n+ self.verify(hash_values[2] != hash_values[0], 'packet 3 should has different hash value to packet 1.')\n+ self.verify(hash_values[3] == hash_values[0],\n+ 'packet 4 should has same hash value with packet 1')\n+ self.verify(hash_values[5] == hash_values[4],\n+ 'packet 6 should has same hash value with packet 5')\n+ self.verify(hash_values[6] != hash_values[4], 'packet 7 should has different hash value to packet 5.')\n+\n+ def test_toeplitz_symmetric_combination(self):\n+ self.switch_testpmd(False)\n+ self.logger.info('Subcase: toeplitz/symmetric with same pattern')\n+ # step 1\n+ rule_toeplitz = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end'\n+ rule_id_toeplitz = self.rssprocess.create_rule(rule=rule_toeplitz)\n+ self.rssprocess.check_rule(rule_list=rule_id_toeplitz)\n+ pkts_toeplitz = ['Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.1.1\", dst=\"192.168.0.2\")/(\"X\"*480)']\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(hash_value[1] != hash_value[0], 'second packet should hash value different from the first packet')\n+ self.verify(hash_value[2] == hash_value[0], 'third packet should hash value same with the first packet')\n+ # step 2\n+ rule_symmetric = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end'\n+ rule_id_symmetric = self.rssprocess.create_rule(rule=rule_symmetric)\n+ pkts_symmetric =['Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.2\",dst=\"192.168.0.1\")/(\"X\"*480)']\n+ self.rssprocess.check_rule(rule_list=rule_id_symmetric)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] == hash_value[1], 'second packet should hash value same with the first packet')\n+ # step 3\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(len(hash_value[0]) != hash_value[2], 'the toeplitz should not work')\n+ for temp in range(len(hash_value)):\n+ self.verify(len(hash_value[temp]) != 0, 'all the toeplitz packet should have hash value')\n+ #step 4\n+ self.rssprocess.destroy_rule(rule_id=rule_id_symmetric)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(len(hash_value) == 0, 'all the toeplitz packet should have no hash value')\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(len(hash_value) == 0, 'all the symmetric packet should have no hash value')\n+ self.pmd_output.execute_cmd('flow flush 0')\n+\n+ self.logger.info('Subcase: toeplitz/symmetric with same pattern (switched rule order)')\n+ # step 1\n+ rule_id_symmetric = self.rssprocess.create_rule(rule=rule_symmetric)\n+ self.rssprocess.check_rule(rule_list=rule_id_symmetric)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] == hash_value[1], 'second packet should hash value same with the first packet')\n+ rule_id_toeplitz = self.rssprocess.create_rule(rule=rule_toeplitz)\n+ self.rssprocess.check_rule(rule_list=rule_id_toeplitz)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(hash_value[1] != hash_value[0], 'second packet should hash value different from the first packet')\n+ self.verify(hash_value[2] == hash_value[0], 'third packet should hash value same with the first packet')\n+ # step 2\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] != hash_value[1], 'symmetric rule should not work')\n+ # step 3\n+ self.rssprocess.destroy_rule(rule_id=rule_id_toeplitz)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(len(hash_value) == 0, 'all the toeplitz packet should have no hash value')\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(len(hash_value) == 0, 'all the symmetric packet should have no hash value')\n+ self.pmd_output.execute_cmd('flow flush 0')\n+\n+ self.logger.info('Subcase: toeplitz/symmetric with different pattern (different UL/DL)')\n+ # step 1\n+ rule_toeplitz = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end'\n+ pkts_toeplitz = [\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.1.1\", dst=\"192.168.0.2\")/(\"X\"*480)'\n+ ]\n+ rule_symmetric = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end'\n+ pkts_symmetric = [\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=\"192.168.0.2\",dst=\"192.168.0.1\")/(\"X\"*480)'\n+ ]\n+ rule_id_toeplitz = self.rssprocess.create_rule(rule=rule_toeplitz)\n+ self.rssprocess.check_rule(rule_list=rule_id_toeplitz)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(hash_value[1] != hash_value[0], 'second packet should hash value different from the first packet')\n+ self.verify(hash_value[2] == hash_value[0], 'third packet should hash value same with the first packet')\n+ rule_id_symmetric = self.rssprocess.create_rule(rule=rule_symmetric)\n+ self.rssprocess.check_rule(rule_list=rule_id_symmetric)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] == hash_value[1], 'second packet should hash value same with the first packet')\n+ # step 2\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(hash_value[1] != hash_value[0], 'second packet should hash value different from the first packet')\n+ self.verify(hash_value[2] == hash_value[0], 'third packet should hash value same with the first packet')\n+ # step 3\n+ self.rssprocess.destroy_rule(rule_id=rule_id_symmetric)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(len(hash_value) == 0, 'all the symmetric packet should have no hash value')\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(hash_value[1] != hash_value[0], 'second packet should hash value different from the first packet')\n+ self.verify(hash_value[2] == hash_value[0], 'third packet should hash value same with the first packet')\n+ rule_id_symmetric = self.rssprocess.create_rule(rule=rule_symmetric)\n+ self.rssprocess.check_rule(rule_list=rule_id_symmetric)\n+ self.rssprocess.destroy_rule(rule_id=rule_id_toeplitz)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] == hash_value[1], 'second packet should hash value same with the first packet')\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(len(hash_value) == 0, 'third packet should hash value same with the first packet')\n+ self.pmd_output.execute_cmd('flow flush 0')\n+\n+ self.logger.info('Subcase: toeplitz/symmetric with different pattern (with/without UL/DL)')\n+ # step 1\n+ rule_toeplitz = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end'\n+ pkts_toeplitz = [\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.1.1\", dst=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.1.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=\"192.168.1.1\", dst=\"192.168.0.2\")/(\"X\"*480)'\n+ ]\n+ rule_symmetric = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end'\n+ pkts_symmetric = [\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.2\",dst=\"192.168.0.1\")/(\"X\"*480)'\n+ ]\n+ rule_id_toeplitz = self.rssprocess.create_rule(rule=rule_toeplitz)\n+ self.rssprocess.check_rule(rule_list=rule_id_toeplitz)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(hash_value[1] != hash_value[0], 'hash_value[1] should hash value different from hash_value[0]')\n+ self.verify(hash_value[2] == hash_value[0], 'hash_value[2] should hash value same with hash_value[0]')\n+ self.verify(hash_value[4] != hash_value[3], 'hash_value[4] should hash value different from hash_value[3]')\n+ self.verify(hash_value[5] == hash_value[3], 'hash_value[5] should hash value same with hash_value[3]')\n+ rule_id_symmetric = self.rssprocess.create_rule(rule=rule_symmetric)\n+ self.rssprocess.check_rule(rule_list=rule_id_symmetric)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] == hash_value[1], 'second packet should hash value same with the first packet')\n+ # step 2\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ for temp in range(len(hash_value)):\n+ self.verify(len(hash_value[temp]) != 0, 'all the toeplitz packet should have hash value')\n+ # step 3\n+ self.rssprocess.destroy_rule(rule_id=rule_id_symmetric)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] != hash_value[1], 'symmetric rule should not work')\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(hash_value[1] != hash_value[0], 'hash_value[1] should hash value different from hash_value[0]')\n+ self.verify(hash_value[2] == hash_value[0], 'hash_value[2] should hash value same with hash_value[0]')\n+ self.verify(hash_value[4] != hash_value[3], 'hash_value[4] should hash value different from hash_value[3]')\n+ self.verify(hash_value[5] == hash_value[3], 'hash_value[5] should hash value same with hash_value[3]')\n+ # step 4\n+ rule_id_symmetric = self.rssprocess.create_rule(rule=rule_symmetric)\n+ self.rssprocess.check_rule(rule_list=rule_id_symmetric)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] == hash_value[1], 'second packet should hash value same with the first packet')\n+ # step 5\n+ self.rssprocess.destroy_rule(rule_id=rule_id_toeplitz)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] == hash_value[1], 'second packet should hash value same with the first packet')\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ for temp in range(len(hash_value)):\n+ if temp > 2:\n+ self.verify(len(hash_value) == 0, 'all the toeplitz UL packet should have no hash value')\n+ self.pmd_output.execute_cmd('flow flush 0')\n+\n+ self.logger.info('Subcase: toeplitz/symmetric with different pattern')\n+ # step 1\n+ rule_toeplitz = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end'\n+ pkts_toeplitz = [\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.1.1\", dst=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/UDP(sport=32, dport=23)/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=\"192.168.0.1\", dst=\"192.168.1.2\")/UDP(sport=22, dport=33)/(\"X\"*480)'\n+ ]\n+ rule_symmetric = 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end'\n+ pkts_symmetric = [\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\",dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/(\"X\"*480)',\n+ 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IPv6(src=\"2222:3333:4444:5555:6666:7777:8888:9999\",dst=\"1111:2222:3333:4444:5555:6666:7777:8888\")/(\"X\"*480)'\n+ ]\n+ rule_id_toeplitz = self.rssprocess.create_rule(rule=rule_toeplitz)\n+ self.rssprocess.check_rule(rule_list=rule_id_toeplitz)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(hash_value[1] != hash_value[0], 'hash_value[1] should hash value different from hash_value[0]')\n+ self.verify(hash_value[2] != hash_value[0], 'hash_value[2] should hash value different with hash_value[0]')\n+ self.verify(hash_value[3] == hash_value[0], 'hash_value[3] should hash value same from hash_value[0]')\n+ rule_id_symmetric = self.rssprocess.create_rule(rule=rule_symmetric)\n+ self.rssprocess.check_rule(rule_list=rule_id_symmetric)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] == hash_value[1], 'second packet should hash value same with the first packet')\n+ # step 2\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ for temp in range(len(hash_value)):\n+ self.verify(len(hash_value[temp]) != 0, 'all the toeplitz packet should have hash value')\n+ # step 3\n+ self.rssprocess.destroy_rule(rule_id=rule_id_symmetric)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(len(hash_value) == 0, 'all the symmetric packet should have no hash value')\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(hash_value[1] != hash_value[0], 'hash_value[1] should hash value different from hash_value[0]')\n+ self.verify(hash_value[2] != hash_value[0], 'hash_value[2] should hash value different with hash_value[0]')\n+ self.verify(hash_value[3] == hash_value[0], 'hash_value[3] should hash value same from hash_value[0]')\n+ # step 4\n+ rule_id_symmetric = self.rssprocess.create_rule(rule=rule_symmetric)\n+ self.rssprocess.check_rule(rule_list=rule_id_symmetric)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] == hash_value[1], 'second packet should hash value same with the first packet')\n+ self.rssprocess.destroy_rule(rule_id=rule_id_toeplitz)\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+ self.verify(hash_value[0] == hash_value[1], 'second packet should hash value same with the first packet')\n+ hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+ self.verify(len(hash_value) == 0, 'all the symmetric packet should have no hash value')\n+ self.pmd_output.execute_cmd('flow flush 0')\n+\n+ def tear_down(self):\n+ # destroy all flow rule on port 0\n+ self.dut.send_command(\"flow flush 0\", timeout=1)\n+ self.dut.send_command(\"clear port stats all\", timeout=1)\n+ self.pmd_output.execute_cmd(\"stop\")\n+\n+ def tear_down_all(self):\n+ self.dut.kill_all()\n", "prefixes": [ "V4", "8/8" ] }{ "id": 83512, "url": "