get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 81574,
    "url": "http://patches.dpdk.org/api/patches/81574/?format=api",
    "web_url": "http://patches.dpdk.org/project/dts/patch/1603186889-10755-1-git-send-email-zhiminx.huang@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": "<1603186889-10755-1-git-send-email-zhiminx.huang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/1603186889-10755-1-git-send-email-zhiminx.huang@intel.com",
    "date": "2020-10-20T09:41:29",
    "name": "[V1] tests/cvl_iavf_rss_gtpu:add iavf rss gtpu suite",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "c667a03bb080b5ce3110123676e96b1197947984",
    "submitter": {
        "id": 1685,
        "url": "http://patches.dpdk.org/api/people/1685/?format=api",
        "name": "Huang, ZhiminX",
        "email": "zhiminx.huang@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dts/patch/1603186889-10755-1-git-send-email-zhiminx.huang@intel.com/mbox/",
    "series": [
        {
            "id": 13139,
            "url": "http://patches.dpdk.org/api/series/13139/?format=api",
            "web_url": "http://patches.dpdk.org/project/dts/list/?series=13139",
            "date": "2020-10-20T09:41:29",
            "name": "[V1] tests/cvl_iavf_rss_gtpu:add iavf rss gtpu suite",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/13139/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/81574/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/81574/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 AD3B7A04DD;\n\tTue, 20 Oct 2020 11:48:06 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 993F0BCE9;\n\tTue, 20 Oct 2020 11:48:05 +0200 (CEST)",
            "from mga09.intel.com (mga09.intel.com [134.134.136.24])\n by dpdk.org (Postfix) with ESMTP id 187F65A97\n for <dts@dpdk.org>; Tue, 20 Oct 2020 11:48:00 +0200 (CEST)",
            "from orsmga004.jf.intel.com ([10.7.209.38])\n by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 20 Oct 2020 02:47:58 -0700",
            "from unknown (HELO dpdk-huangzm-d.sh.intel.com) ([10.240.183.72])\n by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 20 Oct 2020 02:47:52 -0700"
        ],
        "IronPort-SDR": [
            "\n 6jdGYoK2z3jir2PFH+Dh/ovvBoLDXJLVB3RnFb3sIieIiWIVRLoKyn+pNSdFd7iOs5X8ab0sZF\n UVAvFfMKfhHw==",
            "\n fgT9XdZr1QiqPL1n64lYgZ2XV39AnL7K5no/i2CNpoFBgU6W01x1SGDpx5jVPHpViEfq/K/qhe\n TQCtwZVjpYBA=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9779\"; a=\"167301918\"",
            "E=Sophos;i=\"5.77,396,1596524400\"; d=\"scan'208\";a=\"167301918\"",
            "E=Sophos;i=\"5.77,396,1596524400\"; d=\"scan'208\";a=\"465874791\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "From": "Zhimin Huang <zhiminx.huang@intel.com>",
        "To": "dts@dpdk.org,\n\tqi.fu@intel.com",
        "Cc": "Zhimin Huang <zhiminx.huang@intel.com>",
        "Date": "Tue, 20 Oct 2020 17:41:29 +0800",
        "Message-Id": "<1603186889-10755-1-git-send-email-zhiminx.huang@intel.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "Subject": "[dts]  [PATCH V1] tests/cvl_iavf_rss_gtpu:add iavf rss gtpu suite",
        "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_iavf_rss_gtpu.py suite.\n\nSigned-off-by: Zhimin Huang <zhiminx.huang@intel.com>\n---\n tests/TestSuite_cvl_iavf_rss_gtpu.py | 8962 ++++++++++++++++++++++++++++++++++\n 1 file changed, 8962 insertions(+)\n create mode 100755 tests/TestSuite_cvl_iavf_rss_gtpu.py",
    "diff": "diff --git a/tests/TestSuite_cvl_iavf_rss_gtpu.py b/tests/TestSuite_cvl_iavf_rss_gtpu.py\nnew file mode 100755\nindex 0000000..baeff8a\n--- /dev/null\n+++ b/tests/TestSuite_cvl_iavf_rss_gtpu.py\n@@ -0,0 +1,8962 @@\n+# BSD LICENSE\n+#\n+# Copyright(c) 2010-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 random\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+mac_ipv4_gtpu_ipv4_basic = {\n+    'ipv4-nonfrag': 'Ether(dst=\"00:11:22:33:44:55\")/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=\"00:11:22:33:44:55\")/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=\"00:11:22:33:44:55\")/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-tcp': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP()/(\"X\"*480)',\n+    'ipv4-udp': 'Ether(dst=\"00:11:22:33:44:55\")/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+\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-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-tcp'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-tcp'],\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+    '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-tcp'],\n+                mac_ipv4_gtpu_ipv4_basic['ipv4-udp'],\n+            ],\n+            'action': 'check_no_hash_or_different',\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-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-tcp'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-tcp'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-tcp'].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+    '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-tcp'],\n+                mac_ipv4_gtpu_ipv4_basic['ipv4-udp'],\n+            ],\n+            'action': 'check_no_hash_or_different',\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+    '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-tcp'],\n+                mac_ipv4_gtpu_ipv4_basic['ipv4-udp'],\n+            ],\n+            'action': 'check_no_hash_or_different',\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+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/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': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/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=\"00:11:22:33:44:55\")/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': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/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=\"00:11:22:33:44:55\")/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': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/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+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/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+            'action': {'save_hash': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP()/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/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+            'action': {'check_no_hash_or_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(src=\"192.168.0.3\",dst=\"192.168.0.8\",frag=6)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(src=\"192.168.0.10\",dst=\"192.168.0.20\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(src=\"192.168.0.10\",dst=\"192.168.0.20\")/UDP()/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-udp'},\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+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/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=\"00:11:22:33:44:55\")/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=\"00:11:22:33:44:55\")/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=\"00:11:22:33:44:55\")/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+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/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_no_hash_or_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/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_no_hash_or_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/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_no_hash_or_different',\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\"',\n+                                                 '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\"',\n+                                                 'IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\"')\n+                                        .replace(\n+    'IPv61(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")',\n+    'IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")')\n+                                        .replace(\n+    'IPv61(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")',\n+    'IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")')\n+                                        .replace('gtpu / ipv4', 'gtpu / ipv6').replace('types ipv4-udp',\n+                                                                                       '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\"',\n+                                                 '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\"',\n+                                                 'IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\"')\n+                                        .replace(\n+    'IPv61(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")',\n+    'IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")')\n+                                        .replace(\n+    'IPv61(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")',\n+    'IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")')\n+                                        .replace('gtpu / ipv4', 'gtpu / ipv6').replace('types ipv4-tcp',\n+                                                                                       '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+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.2\",dst=\"192.168.0.1\")/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.3\",dst=\"192.168.0.8\",frag=6)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.8\",dst=\"192.168.0.3\",frag=6)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.10\",dst=\"192.168.0.20\")/ICMP()/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.20\",dst=\"192.168.0.10\")/ICMP()/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP()/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP()/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\", frag=6)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(dst=\"192.168.0.2\",src=\"192.168.0.1\")/UDP()/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-udp'},\n+        },\n+    ],\n+}\n+mac_ipv4_gtpu_eh_ul_ipv4_symmetric = eval(str(mac_ipv4_gtpu_eh_dl_ipv4_symmetric)\n+                                          .replace('pdu_type=1', 'pdu_type=2')\n+                                          .replace('pdu_type=0', 'pdu_type=1')\n+                                          .replace('pdu_type=2', 'pdu_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+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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('pdu_type=1', 'pdu_type=2')\n+                                              .replace('pdu_type=0', 'pdu_type=1')\n+                                              .replace('pdu_type=2', 'pdu_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('gtpu / ipv4', 'gtpu / ipv6').replace('types ipv4', 'types ipv6'))\n+\n+mac_ipv6_gtpu_eh_ipv6_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv6_symmetric).replace('eth / ipv4', 'eth / ipv6')\n+                                       .replace('IP()', 'IPv6()').replace('mac_ipv4', 'mac_ipv6')\n+                                       .replace('ipv4 / end ', 'ipv6 / end ')\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('gtpu / ipv4', 'gtpu / ipv6').replace('types ipv4-udp', 'types ipv6-udp')\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('gtpu / ipv4', 'gtpu / ipv6').replace('types ipv4-tcp', 'types ipv6-tcp')\n+                                        .replace('ipv4 / tcp / end ', 'ipv6 / tcp / end ')\n+                                        )\n+\n+mac_ipv6_gtpu_eh_ipv6_tcp_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv6_tcp_symmetric).replace('eth / ipv4', 'eth / ipv6')\n+                                        .replace('IP()', 'IPv6()').replace('mac_ipv4', 'mac_ipv6')\n+                                        )\n+\n+mac_ipv4_gtpu_ipv4_udp_basic = 'Ether(dst=\"00:11:22:33:44:55\")/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+\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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',\n+                                                                                                '192.168.1.1'),\n+            'action': 'check_hash_same',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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',\n+                                                                                                '192.168.1.1'),\n+            'action': 'check_hash_same',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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',\n+                                                                                                '192.168.1.2'),\n+            'action': 'check_hash_same',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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',\n+                                                                                                '192.168.1.2'),\n+            'action': 'check_hash_same',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+            'action': 'check_no_hash_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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]\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=\"00:11:22:33:44:55\")/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=\"00:11:22:33:44:55\")/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=\"00:11:22:33:44:55\")/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-tcp': 'Ether(dst=\"00:11:22:33:44:55\")/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()/(\"X\"*480)',\n+    'ipv6-udp': 'Ether(dst=\"00:11:22:33:44:55\")/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+\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', 'ipv6-nonfrag'},\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', 'ipv6-frag'},\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', 'ipv6-icmp'},\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-tcp'],\n+            'action': {'save_hash', 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-tcp'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-tcp'],\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+            'action': {'save_hash', 'ipv6-udp'},\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+    '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-tcp'],\n+                mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+            ],\n+            'action': 'check_no_hash_or_different',\n+        },\n+    ]\n+}\n+\n+mac_ipv4_gtpu_ipv6_l3src_only = {\n+    'sub_casename': 'mac_ipv4_gtpu_ipv6_l3src_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / end actions rss types ipv6 l3-src-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', 'ipv6-nonfrag'},\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_l3dst_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', 'ipv6-frag'},\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_l3dst_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', 'ipv6-icmp'},\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_l3dst_changed_pkt['ipv6-icmp'],\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-tcp'],\n+            'action': {'save_hash', 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-tcp'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-tcp'],\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+            'action': {'save_hash', 'ipv6-udp'},\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_l3dst_changed_pkt['ipv6-udp'],\n+            'action': 'check_hash_same',\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-tcp'],\n+                mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+            ],\n+            'action': 'check_no_hash_or_different',\n+        },\n+    ]\n+}\n+\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', 'ipv6-nonfrag'},\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', 'ipv6-frag'},\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', 'ipv6-icmp'},\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-tcp'],\n+            'action': {'save_hash', 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-tcp'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-tcp'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-tcp'].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', 'ipv6-udp'},\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+    '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-tcp'],\n+                mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+            ],\n+            'action': 'check_no_hash_or_different',\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+    '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-tcp'],\n+                mac_ipv4_gtpu_ipv6_basic['ipv6-udp'],\n+            ],\n+            'action': 'check_no_hash_or_different',\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=\"00:11:22:33:44:55\")/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_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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+            'action': 'check_no_hash_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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]\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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+    'ipv4-frag': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+    'ipv4-icmp': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+    'ipv4-udp': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP()/(\"X\"*480)',\n+    'ipv4-tcp': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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(\n+    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(\n+    str(mac_ipv4_gtpu_eh_dl_ipv4_basic).replace('192.168.0.1', '192.168.1.1'))\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+    '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_or_different',\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-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-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-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-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+    '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_or_different',\n+        },\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]\n+\n+mac_ipv4_gtpu_eh_ul_ipv4 = [eval(str(element).replace('pdu_type=1', 'pdu_type=2')\n+                                 .replace('pdu_type=0', 'pdu_type=1').replace('pdu_type=2', 'pdu_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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+    'ipv4-nonfrag_ul': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/(\"X\"*480)',\n+    'ipv4-frag': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+    'ipv4-icmp': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+    'ipv4-udp': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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+\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+    '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_or_different',\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+    '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_or_different',\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+    '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+\n+mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic = {\n+    'dl': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+    'ul': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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_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+    '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_or_different',\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+    '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_or_different',\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+    '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_or_different',\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+    '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_or_different',\n+        },\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_l3src_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+]\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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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_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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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',\n+                                                   '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',\n+                                                                                                      '192.168.1.1'),\n+            'action': 'check_hash_same',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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',\n+                                                                                                      '192.168.1.1'),\n+            'action': 'check_hash_same',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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',\n+                                                                                                      '192.168.1.2'),\n+            'action': 'check_hash_same',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic,\n+            'action': 'check_no_hash_or_different',\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,\n+                                         mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4dst,\n+                                         mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4src,\n+                                         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]\n+\n+mac_ipv4_gtpu_eh_ul_ipv4_udp_toeplitz = [eval(str(element).replace('pdu_type=1', 'pdu_type=2')\n+                                              .replace('pdu_type=0', 'pdu_type=1').replace('pdu_type=2', 'pdu_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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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+\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+    '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_or_different',\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',\n+                                                                                                          '3434'),\n+            'action': 'check_hash_different',\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-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-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-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+    '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_or_different',\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]\n+\n+mac_ipv4_gtpu_eh_ul_ipv6_toeplitz = [eval(str(element).replace('pdu_type=1', 'pdu_type=2')\n+                                          .replace('pdu_type=0', 'pdu_type=1').replace('pdu_type=2', 'pdu_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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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_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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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',\n+                                                   '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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+            'action': 'check_no_hash_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+            'action': 'check_no_hash_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic,\n+            'action': 'check_no_hash_or_different',\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,\n+                                         mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4dst,\n+                                         mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4src,\n+                                         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]\n+mac_ipv4_gtpu_eh_ul_ipv6_udp_toeplitz = [eval(str(element).replace('pdu_type=1', 'pdu_type=2')\n+                                              .replace('pdu_type=0', 'pdu_type=1').replace('pdu_type=2', 'pdu_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+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=\"00:11:22:33:44:55\")/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=\"00:11:22:33:44:55\")/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=\"00:11:22:33:44:55\")/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_or_no_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/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_or_no_hash',\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('IP()', 'IPv6()')\n+                                           .replace('mac_ipv4', 'mac_ipv6'))\n+inner_l4_mac_ipv4_gtpu_eh_ipv6_udp_tcp = {\n+    'sub_casename': 'inner_l4_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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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_or_no_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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_or_no_hash',\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('pdu_type=0', 'pdu_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+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different', 'ipv4-udp'},\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+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different', 'udp-dl'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/UDP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_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+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different', 'udp-dl'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(dst=\"192.168.0.1\",src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_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+# iavf gtpc and gtpu\n+# matched basic pkt\n+mac_ipv4_gtpu_basic_pkt = {\n+    'ipv4-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv4-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv4-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv4-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv4-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv4-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoResponse()',\n+    ],\n+}\n+\n+mac_ipv6_gtpu_basic_pkt = {\n+    'ipv6-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv6-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv6-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv6-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv6-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv6-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+}\n+\n+mac_ipv4_gtpc_basic_pkt = {\n+    'ipv4-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv4-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'ipv4-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'ipv4-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'ipv4-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'ipv4-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'ipv4-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'ipv4-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'ipv4-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=27)/GTPPDUNotificationRequest()',\n+    ],\n+    'ipv4-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ],\n+    'vlan-ipv4-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ]\n+}\n+\n+mac_ipv6_gtpc_basic_pkt = {\n+    'ipv6-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv6-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'ipv6-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'ipv6-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'ipv6-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'ipv6-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'ipv6-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'ipv6-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'ipv6-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+    ],\n+    'ipv6-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ],\n+    'vlan-ipv6-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ]\n+}\n+\n+# mismatched basic pkt\n+\n+mac_ipv4_gtpu_mismatched_pkt = {\n+    'ipv4-gtpu-eh-ipv4': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678, gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-ipv4': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678, gtp_type=255)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-eh-ipv6': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678, gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-ipv6': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678, gtp_type=255)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ]\n+}\n+\n+mac_ipv6_gtpu_mismatched_pkt = {\n+    'ipv6-gtpu-eh-ipv4': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-ipv4': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-eh-ipv6': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-ipv6': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+}\n+\n+mac_ipv4_gtpc_mismatched_pkt = {\n+    'ipv4-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-ipv4': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678, gtp_type=255)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-ipv6': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678, gtp_type=255)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ]\n+}\n+\n+mac_ipv6_gtpc_mismatched_pkt = {\n+    'ipv6-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-ipv4': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-ipv6': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ]\n+}\n+\n+# matched change pkt\n+\n+mac_ipv4_gtpu_l3src_only_changed = {\n+    'ipv4-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv4-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv4-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv4-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv4-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv4-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoResponse()',\n+    ],\n+}\n+\n+mac_ipv4_gtpu_l3dst_only_changed = {\n+    'ipv4-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'ipv4-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv4-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv4-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv4-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv4-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv4-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoResponse()',\n+    ],\n+}\n+\n+mac_ipv6_gtpu_l3src_only_changed = {\n+    'ipv6-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv6-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv6-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv6-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv6-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv6-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+}\n+\n+mac_ipv6_gtpu_l3dst_only_changed = {\n+    'ipv6-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'ipv6-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv6-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv6-gtpu-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv6-gtpu-eh-pay': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+    ],\n+    'vlan-ipv6-gtpu-echo-request': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv6-gtpu-echo-reponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+}\n+\n+mac_ipv4_gtpc_l3src_only_changed = {\n+    'ipv4-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv4-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'ipv4-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'ipv4-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'ipv4-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'ipv4-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'ipv4-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'ipv4-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'ipv4-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=27)/GTPPDUNotificationRequest()',\n+    ],\n+    'ipv4-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ],\n+    'vlan-ipv4-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ],\n+\n+}\n+\n+mac_ipv4_gtpc_l3dst_only_changed = {\n+    'ipv4-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv4-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'ipv4-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'ipv4-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'ipv4-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'ipv4-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'ipv4-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'ipv4-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'ipv4-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+    ],\n+    'ipv4-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ],\n+    'vlan-ipv4-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'vlan-ipv4-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+    ],\n+    'vlan-ipv4-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ],\n+\n+}\n+\n+mac_ipv6_gtpc_l3src_only_changed = {\n+    'ipv6-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv6-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'ipv6-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'ipv6-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'ipv6-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'ipv6-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'ipv6-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'ipv6-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'ipv6-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+    ],\n+    'ipv6-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ],\n+    'vlan-ipv6-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ],\n+\n+}\n+\n+mac_ipv6_gtpc_l3dst_only_changed = {\n+    'ipv6-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'ipv6-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'ipv6-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'ipv6-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'ipv6-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'ipv6-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'ipv6-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'ipv6-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'ipv6-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+    ],\n+    'ipv6-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ],\n+    'vlan-ipv6-gtpc-EchoRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-EchoEesponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-CreatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-CreatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-UpdatePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-UpdatePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-DeletePDPContextRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-DeletePDPContextResponse': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+    ],\n+    'vlan-ipv6-gtpc-PDUNotificationRequest': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+    ],\n+    'vlan-ipv6-gtpc-SupportedExtensionHeadersNotification': [\n+        'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+    ],\n+\n+}\n+\n+# subcase\n+\n+mac_ipv4_gtpu_l3src_only = {\n+    'sub_casename': 'mac_ipv4_gtpu_l3src_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / end actions rss types ipv4 l3-src-only end '\n+            'key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['ipv4-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['ipv4-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-request'],\n+            'action': {'save_hash': 'ipv4-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['ipv4-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'ipv4-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['ipv4-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-pay'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['vlan-ipv4-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['vlan-ipv4-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-request'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['vlan-ipv4-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['vlan-ipv4-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        # send mismatched pkt\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-eh-ipv4'],\n+             'action': 'check_no_hash',\n+            #'action': {'save_hash': 'ipv4-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683, gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x35)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-ipv4'],\n+             'action': 'check_no_hash',\n+            #'action': {'save_hash': 'ipv4-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-eh-ipv6'],\n+             'action': 'check_no_hash',\n+            #'action': {'save_hash': 'ipv4-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x55)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-ipv6'],\n+             'action': 'check_no_hash',\n+            #'action': {'save_hash': 'ipv4-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.5\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv6-gtpu-pay'],\n+             #'action': 'check_no_hash',\n+            'action': {'save_hash': 'ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv6-gtpu-eh-pay'],\n+             # 'action': 'check_no_hash',\n+             'action': {'save_hash': 'ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpc-EchoRequest'],\n+             # 'action': 'check_no_hash',\n+             'action': {'save_hash': 'ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-eh-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-request'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-reponse'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-eh-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-request'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-reponse'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_gtpu_l3dst_only = {\n+    'sub_casename': 'mac_ipv4_gtpu_l3dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / end actions rss types ipv4 l3-dst-only end '\n+            'key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['ipv4-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['ipv4-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': {'check_hash_same': 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-request'],\n+            'action': {'save_hash': 'ipv4-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['ipv4-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'ipv4-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['ipv4-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=27,dport=2152)/GTP_U_Header(teid=0x12345685,gtp_type=0x01)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-pay'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['vlan-ipv4-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['vlan-ipv4-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-request'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['vlan-ipv4-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['vlan-ipv4-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        # send mismatched pkt\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-eh-ipv4'],\n+            'action': 'check_no_hash',\n+            # 'action': {'save_hash': 'ipv4-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-ipv4'],\n+            'action': 'check_no_hash',\n+            # 'action': {'save_hash': 'ipv4-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-eh-ipv6'],\n+            'action': 'check_no_hash',\n+            # 'action': {'save_hash': 'ipv4-gtpu-eh-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x55)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-ipv6'],\n+            'action': 'check_no_hash',\n+            # 'action': {'save_hash': 'ipv4-gtpu-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv6-gtpu-pay'],\n+            # 'action': 'check_no_hash',\n+            'action': {'save_hash': 'ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv6-gtpu-eh-pay'],\n+            # 'action': 'check_no_hash',\n+            'action': {'save_hash': 'ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpc-EchoRequest'],\n+            # 'action': 'check_no_hash',\n+            'action': {'save_hash': 'ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-eh-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-request'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-reponse'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-eh-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-request'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-reponse'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_gtpu_l3_src_only_l3_dst_only = {\n+    'sub_casename': 'mac_ipv4_gtpu_l3_src_only_l3_dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / end actions rss types ipv4 end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['ipv4-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['ipv4-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['ipv4-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['ipv4-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': {'check_hash_different': 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345691,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-request'],\n+            'action': {'save_hash': 'ipv4-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['ipv4-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['ipv4-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345691,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'ipv4-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['ipv4-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['ipv4-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-pay'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['vlan-ipv4-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['vlan-ipv4-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['vlan-ipv4-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['vlan-ipv4-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-request'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['vlan-ipv4-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['vlan-ipv4-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=21,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3dst_only_changed['vlan-ipv4-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_l3src_only_changed['vlan-ipv4-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-eh-ipv4'],\n+            'action': 'check_no_hash',\n+            # 'action': {'save_hash': 'ipv4-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-ipv4'],\n+            'action': 'check_no_hash',\n+            # 'action': {'save_hash': 'ipv4-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-eh-ipv6'],\n+            'action': 'check_no_hash',\n+            # 'action': {'save_hash': 'ipv4-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x55)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-ipv6'],\n+            'action': 'check_no_hash',\n+            # 'action': {'save_hash': 'ipv4-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        # not support 20.11\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv6-gtpu-pay'],\n+             'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv6-gtpu-eh-pay'],\n+             'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpc-EchoRequest'],\n+             'action': 'check_no_hash',\n+        },\n+    ],\n+    # not support 20.11\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-eh-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-request'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-reponse'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-eh-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-request'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-reponse'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_gtpu_l3src_only = {\n+    'sub_casename': 'mac_ipv6_gtpu_l3src_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / gtpu / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-pay'],\n+            'action': {'save_hash': 'ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['ipv6-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345691,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash': 'ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['ipv6-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-request'],\n+            'action': {'save_hash': 'ipv6-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['ipv6-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=25,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'ipv6-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['ipv6-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=25,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-pay'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['vlan-ipv6-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['vlan-ipv6-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2027\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x44)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-request'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['vlan-ipv6-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=25,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['vlan-ipv6-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=25,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-eh-ipv4'],\n+            #'action': 'check_no_hash',\n+             'action': {'save_hash': 'ipv6-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x55)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-ipv4'],\n+            #'action': 'check_no_hash',\n+             'action': {'save_hash': 'ipv6-gtpu-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-eh-ipv6'],\n+            #'action': 'check_no_hash',\n+             'action': {'save_hash': 'ipv6-gtpu-eh-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2930\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2055\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-ipv6'],\n+            #'action': 'check_no_hash',\n+             'action': {'save_hash': 'ipv6-gtpu-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2930\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2055\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv4-gtpu-pay'],\n+            #'action': 'check_no_hash',\n+             'action': {'save_hash': 'ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv4-gtpu-eh-pay'],\n+            #'action': 'check_no_hash',\n+             'action': {'save_hash': 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpc-EchoRequest'],\n+            #'action': 'check_no_hash',\n+             'action': {'save_hash': 'ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-eh-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-request'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-reponse'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-eh-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-request'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-reponse'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_gtpu_l3dst_only = {\n+    'sub_casename': 'mac_ipv6_gtpu_l3dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / gtpu / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-pay'],\n+            'action': {'save_hash': 'ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['ipv6-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash': 'ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['ipv6-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-request'],\n+            'action': {'save_hash': 'ipv6-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['ipv6-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'ipv6-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['ipv6-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345691,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-pay'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['vlan-ipv6-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=7)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['vlan-ipv6-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-request'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['vlan-ipv6-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['vlan-ipv6-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-eh-ipv4'],\n+            # 'action': 'check_no_hash',\n+            'action': {'save_hash': 'ipv6-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x55)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-ipv4'],\n+            # 'action': 'check_no_hash',\n+            'action': {'save_hash': 'ipv6-gtpu-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-eh-ipv6'],\n+            # 'action': 'check_no_hash',\n+            'action': {'save_hash': 'ipv6-gtpu-eh-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2930\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2091\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-ipv6'],\n+            # 'action': 'check_no_hash',\n+            'action': {'save_hash': 'ipv6-gtpu-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2930\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2091\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv4-gtpu-pay'],\n+            # 'action': 'check_no_hash',\n+            'action': {'save_hash': 'ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv4-gtpu-eh-pay'],\n+            # 'action': 'check_no_hash',\n+            'action': {'save_hash': 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpc-EchoRequest'],\n+            # 'action': 'check_no_hash',\n+            'action': {'save_hash': 'ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-eh-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-request'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-reponse'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-eh-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-request'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-reponse'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_gtpu_l3_src_only_l3_dst_only = {\n+    'sub_casename': 'mac_ipv6_gtpu_l3_src_only_l3_dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / gtpu / end actions rss types ipv6 end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-pay'],\n+            'action': {'save_hash': 'ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['ipv6-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['ipv6-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash': 'ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['ipv6-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['ipv6-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'heck_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=27,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-request'],\n+            'action': {'save_hash': 'ipv6-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['ipv6-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['ipv6-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'ipv6-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['ipv6-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['ipv6-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-pay'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['vlan-ipv6-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['vlan-ipv6-gtpu-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345683,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['vlan-ipv6-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['vlan-ipv6-gtpu-eh-pay'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-request'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['vlan-ipv6-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['vlan-ipv6-gtpu-echo-request'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3dst_only_changed['vlan-ipv6-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_l3src_only_changed['vlan-ipv6-gtpu-echo-reponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        # not support 20.11\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-eh-ipv4'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-ipv4'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-eh-ipv6'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-ipv6'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv4-gtpu-pay'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv4-gtpu-eh-pay'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpc-EchoRequest'],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    # not support 20.11\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-eh-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-request'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-reponse'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-eh-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-request'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-reponse'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_gtpc_l3src_only = {\n+    'sub_casename': 'mac_ipv4_gtpc_l3src_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpc / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x27)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'ipv4-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-pay'],\n+            'action': {'save_hash', 'ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash', 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-ipv4'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-ipv6'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash', 'ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoEesponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-SupportedExtensionHeadersNotification'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoEesponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_gtpc_l3dst_only = {\n+    'sub_casename': 'mac_ipv4_gtpc_l3dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpc / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end ',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'ipv4-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.3\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-ipv4'],\n+            # 'action': {'save_hash': 'ipv4-gtpu-ipv4'},\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-ipv6'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash', 'ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoEesponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-SupportedExtensionHeadersNotification'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoEesponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_gtpc_l3_src_only_l3_dst_only = {\n+    'sub_casename': 'mac_ipv4_gtpc_l3_src_only_l3_dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpc / end actions rss types ipv4 end key_len 0 queues end / end ',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'ipv4-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3dst_only_changed['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_l3src_only_changed['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-ipv4'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-ipv6'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682, gtp_type=255)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/Raw(\"x\"*96)',\n+            'action': 'check_no_hash',\n+        },\n+        # not support 20.11\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-pay'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-eh-pay'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv6-gtpc-EchoRequest'],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    # not support 20.11\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoEesponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-SupportedExtensionHeadersNotification'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoEesponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_gtpc_l3src_only = {\n+    'sub_casename': 'mac_ipv4_gtpc_l3src_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / gtpc / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end ',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'ipv6-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-pay'],\n+            'action': {'save_hash', 'ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash', 'ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-ipv4'],\n+            'action': {'save_hash', 'ipv6-gtpu-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-ipv6'],\n+            'action': {'save_hash', 'ipv6-gtpu-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2930\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2055\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpc-EchoRequest'],\n+            'action': {'save_hash', 'ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.1\", dst=\"192.168.1.7\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoEesponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-SupportedExtensionHeadersNotification'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoEesponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_gtpc_l3dst_only = {\n+    'sub_casename': 'mac_ipv6_gtpc_l3dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / gtpc / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end ',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'ipv6-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=3)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-pay'],\n+            'action': {'save_hash', 'ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash', 'ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x55)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-ipv4'],\n+            'action': {'save_hash', 'ipv6-gtpu-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/IP(src=\"192.168.1.7\", dst=\"192.168.1.9\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-ipv6'],\n+            'action': {'save_hash', 'ipv6-gtpu-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2152)/GTP_U_Header(teid=0x12345682,gtp_type=255)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2930\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpc-EchoRequest'],\n+            'action': {'save_hash', 'ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.5\", dst=\"192.168.1.3\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoEesponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-SupportedExtensionHeadersNotification'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoEesponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_gtpc_l3_src_only_l3_dst_only = {\n+    'sub_casename': 'mac_ipv6_gtpc_l3_src_only_l3_dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / gtpc / end actions rss types ipv6 end key_len 0 queues end / end ',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345683,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'ipv6-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-EchoRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-EchoEesponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-PDUNotificationRequest'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3dst_only_changed['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_l3src_only_changed['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1537\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2023\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=5)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1536\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=23,dport=2123)/GTPHeader(teid=0x12345682,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        # not support 20.11\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-pay'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-eh-pay'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-ipv4'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-ipv6'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv4-gtpc-EchoRequest'],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    # not support 20.11\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoEesponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-SupportedExtensionHeadersNotification'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoEesponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_gtpu_symmetric = {\n+    'sub_casename': 'mac_ipv4_gtpu_symmetric',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-request'],\n+            'action': {'save_hash': 'ipv4-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'ipv4-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-pay'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-request'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-eh-ipv4'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-ipv4'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-eh-ipv6'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-ipv6'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-pay'],\n+            'action': {'save_hash', 'ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash', 'ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash', 'ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-eh-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-request'][0],\n+                mac_ipv4_gtpu_basic_pkt['ipv4-gtpu-echo-reponse'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-eh-pay'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-request'][0],\n+                mac_ipv4_gtpu_basic_pkt['vlan-ipv4-gtpu-echo-reponse'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_gtpu_symmetric = {\n+    'sub_casename': 'mac_ipv6_gtpu_symmetric',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / gtpu / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-pay'],\n+            'action': {'save_hash': 'ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash': 'ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-request'],\n+            'action': {'save_hash': 'ipv6-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'ipv6-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-pay'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-request'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-echo-request'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-reponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpu-echo-reponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-eh-ipv4'],\n+            'action': {'save_hash', 'ipv6-gtpu-eh-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_mismatched_pkt['ipv6-gtpu-ipv4'],\n+            'action': {'save_hash', 'ipv6-gtpu-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-eh-ipv6'],\n+            'action': {'save_hash', 'ipv6-gtpu-eh-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-ipv6'],\n+            'action': {'save_hash', 'ipv6-gtpu-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv4-gtpu-pay'],\n+            'action': {'save_hash', 'ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash', 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash', 'ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-eh-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-request'][0],\n+                mac_ipv6_gtpu_basic_pkt['ipv6-gtpu-echo-reponse'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-eh-pay'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-request'][0],\n+                mac_ipv6_gtpu_basic_pkt['vlan-ipv6-gtpu-echo-reponse'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_gtpc_symmetric = {\n+    'sub_casename': 'mac_ipv4_gtpc_symmetric',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpc / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'ipv4-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'ipv4-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismatched pkt\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-ipv4'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpu-ipv6'],\n+            'action': 'check_no_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv4-gtpu-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv4-gtpu-eh-pay'],\n+            'action': {'save_hash': 'ipv4-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpc_mismatched_pkt['ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash': ''},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-EchoEesponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['ipv4-gtpc-SupportedExtensionHeadersNotification'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-EchoEesponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv4_gtpc_basic_pkt['vlan-ipv4-gtpc-SupportedExtensionHeadersNotification'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_gtpc_symmetric = {\n+    'sub_casename': 'mac_ipv6_gtpc_symmetric',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / gtpc / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'ipv6-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'ipv6-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'ipv6-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoEesponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-EchoEesponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x02)/GTPEchoResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-CreatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x10)/GTPCreatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-CreatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x11)/GTPCreatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-UpdatePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x12)/GTPUpdatePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-UpdatePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x13)/GTPUpdatePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-DeletePDPContextRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x14)/GTPDeletePDPContextRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextResponse'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-DeletePDPContextResponse'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x15)/GTPDeletePDPContextResponse()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-PDUNotificationRequest'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-PDUNotificationRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1B)/GTPPDUNotificationRequest()',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'],\n+            'action': {'save_hash': 'vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/Dot1Q(vlan=1)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x1F)/GTPSupportedExtensionHeadersNotification()',\n+            'action': 'check_hash_same',\n+        },\n+        # mismactched pkt\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-ipv6'],\n+            'action': {'save_hash': 'ipv6-gtpu-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_gtpu_mismatched_pkt['ipv6-gtpu-ipv4'],\n+            'action': {'save_hash': 'ipv6-gtpu-ipv4'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=255)/IP(src=\"192.168.1.5\", dst=\"192.168.1.7\")/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv6-gtpu-pay'],\n+            'action': {'save_hash': 'ipv6-gtpu-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv6-gtpu-eh-pay'],\n+            'action': {'save_hash': 'ipv6-gtpu-eh-pay'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:1536\")/UDP(sport=20,dport=2152)/GTP_U_Header(teid=0x12345678,gtp_type=0x01)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw(\"x\"*96)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_gtpu_mismatched_pkt['ipv4-gtpc-EchoRequest'],\n+            'action': {'save_hash': 'ipv4-gtpc-EchoRequest'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.1.3\", dst=\"192.168.1.1\")/UDP(sport=20,dport=2123)/GTPHeader(teid=0x12345678,gtp_type=0x01)/GTPEchoRequest()',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-EchoEesponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['ipv6-gtpc-SupportedExtensionHeadersNotification'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-EchoEesponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-CreatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-UpdatePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-DeletePDPContextResponse'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-PDUNotificationRequest'][0],\n+                mac_ipv6_gtpc_basic_pkt['vlan-ipv6-gtpc-SupportedExtensionHeadersNotification'][0],\n+            ],\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_gtpu_toeplitz = [mac_ipv4_gtpu_l3src_only, mac_ipv4_gtpu_l3dst_only, mac_ipv4_gtpu_l3_src_only_l3_dst_only]\n+mac_ipv6_gtpu_toeplitz = [mac_ipv6_gtpu_l3src_only, mac_ipv6_gtpu_l3dst_only, mac_ipv6_gtpu_l3_src_only_l3_dst_only]\n+mac_ipv4_gtpc_toeplitz = [mac_ipv4_gtpc_l3src_only, mac_ipv4_gtpc_l3dst_only, mac_ipv4_gtpc_l3_src_only_l3_dst_only]\n+mac_ipv6_gtpc_toeplitz = [mac_ipv6_gtpc_l3src_only, mac_ipv6_gtpc_l3dst_only, mac_ipv6_gtpc_l3_src_only_l3_dst_only]\n+mac_ipv4_gtpu_symmetric_toeplitz = [mac_ipv4_gtpu_symmetric]\n+mac_ipv6_gtpu_symmetric_toeplitz = [mac_ipv6_gtpu_symmetric]\n+mac_ipv4_gtpc_symmetric_toeplitz = [mac_ipv4_gtpc_symmetric]\n+mac_ipv6_gtpc_symmetric_toeplitz = [mac_ipv6_gtpc_symmetric]\n+\n+\n+class TestCVLIAVFRSSGTPU(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.pf0_intf = self.dut.ports_info[self.dut_ports[0]]['intf']\n+\n+        self.vf_driver = self.get_suite_cfg()['vf_driver']\n+        if self.vf_driver is None:\n+            self.vf_driver = 'vfio-pci'\n+        self.used_dut_port_0 = self.dut_ports[0]\n+        self.dut.generate_sriov_vfs_by_port(self.used_dut_port_0, 1, driver=self.kdriver)\n+        self.sriov_vfs_port = self.dut.ports_info[self.used_dut_port_0]['vfs_port']\n+        self.dut.send_expect('ip link set %s vf 0 mac 00:11:22:33:44:55' % self.pf0_intf, '#')\n+        self.vf0_pci = self.sriov_vfs_port[0].pci\n+        for port in self.sriov_vfs_port:\n+            port.bind_driver(self.vf_driver)\n+\n+        self.pkt = Packet()\n+        self.pmd_output = PmdOutput(self.dut)\n+        self.launch_testpmd()\n+        self.symmetric = False\n+        self.rxq = 16\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+        self.pmd_output.execute_cmd(\"start\")\n+\n+    def destroy_vf(self):\n+        self.dut.send_expect(\"quit\", \"# \", 60)\n+        time.sleep(2)\n+        self.dut.destroy_sriov_vfs_by_port(self.dut_ports[0])\n+\n+    def launch_testpmd(self, symmetric=False):\n+        if symmetric:\n+            param = \"--rxq=16 --txq=16\"\n+        else:\n+            # if support add --disable-rss\n+            param = \"--rxq=16 --txq=16\"\n+        self.pmd_output.start_testpmd(cores=\"1S/4C/1T\", param=param,\n+                                          eal_param=f\"-w {self.vf0_pci}\", socket=self.ports_socket)\n+        '''\n+        self.symmetric = symmetric\n+        if symmetric:\n+            # Need config rss in setup\n+            self.pmd_output.execute_cmd(\"port config all rss all\")\n+        '''\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, symmetric=True):\n+        if symmetric != self.symmetric:\n+            self.pmd_output.quit()\n+            self.launch_testpmd(symmetric=symmetric)\n+            self.pmd_output.execute_cmd(\"start\")\n+\n+    def test_mac_ipv4_gtpu_ipv4(self):\n+        self.switch_testpmd(symmetric=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(symmetric=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(symmetric=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(symmetric=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(symmetric=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(symmetric=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+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_toeplitz)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_ipv4_udp(self):\n+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_udp_toeplitz)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_ipv4_tcp(self):\n+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_tcp_toeplitz)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_ipv6(self):\n+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_toeplitz)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_ipv6_udp(self):\n+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_udp_toeplitz)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_ipv6_tcp(self):\n+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_tcp_toeplitz)\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(symmetric=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(symmetric=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(symmetric=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(symmetric=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(symmetric=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(symmetric=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+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_toeplitz)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_eh_ipv4_udp(self):\n+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_udp_toeplitz)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_eh_ipv4_tcp(self):\n+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_tcp_toeplitz)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_eh_ipv6(self):\n+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_toeplitz)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_eh_ipv6_udp(self):\n+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_udp_toeplitz)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_eh_ipv6_tcp(self):\n+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_tcp_toeplitz)\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(symmetric=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(symmetric=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(symmetric=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(symmetric=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(symmetric=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(symmetric=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+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_toeplitz)\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+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz)\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+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_tcp_toeplitz)\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+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv6_toeplitz)\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+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv6_udp_toeplitz)\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+        self.switch_testpmd(symmetric=False)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul_dl_ipv6_tcp_toeplitz)\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(symmetric=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(symmetric=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(symmetric=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(symmetric=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(symmetric=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(symmetric=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+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_symmetric)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_ipv4_udp_symmetric(self):\n+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_udp_symmetric)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_ipv4_tcp_symmetric(self):\n+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_tcp_symmetric)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_ipv6_symmetric(self):\n+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_symmetric)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_ipv6_udp_symmetric(self):\n+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_udp_symmetric)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_ipv6_tcp_symmetric(self):\n+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_tcp_symmetric)\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(symmetric=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(symmetric=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(symmetric=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(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_symmetric)\n+\n+    def test_mac_ipv4_gtpu_eh_ipv6_udp_symmetric(self):\n+        self.switch_testpmd(symmetric=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_ipv6_tcp_symmetric(self):\n+        self.switch_testpmd(symmetric=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+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_symmetric)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_eh_ipv4_udp_symmetric(self):\n+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_tcp_symmetric)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_eh_ipv4_tcp_symmetric(self):\n+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_tcp_symmetric)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_eh_ipv6_symmetric(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gtpu_eh_ipv6_symmetric)\n+\n+    def test_mac_ipv6_gtpu_eh_ipv6_udp_symmetric(self):\n+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_tcp_symmetric)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_mac_ipv6_gtpu_eh_ipv6_tcp_symmetric(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gtpu_eh_ipv6_tcp_symmetric)\n+\n+    def test_mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric(self):\n+        self.switch_testpmd(symmetric=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(symmetric=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(symmetric=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(symmetric=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(symmetric=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(symmetric=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+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric)\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+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric)\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+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric)\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+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_without_ul_dl_symmetric)\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+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl_symmetric)\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+        self.switch_testpmd(symmetric=True)\n+        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)\n+\n+    def test_inner_l4_protocal_hash(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=inner_l4_protocal_hash)\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 / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 gtpu 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=\"Failed to create parser engine.: 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+        ]\n+        self.rssprocess.create_rule(rule=rules, check_stats=False)\n+\n+    def test_stress_cases(self):\n+        # Subcase: add/delete IPV4_GTPU_UL_IPV4_TCP rules\n+        self.switch_testpmd()\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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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=0x12345)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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_multirules(self):\n+        self.switch_testpmd()\n+        self.logger.info('Subcase: IPV4_GTPU_IPV4/IPV4_GTPU_EH_IPV4')\n+        self.logger.info('Subcase: IPV4_GTPU_EH_IPV4 with/without UL/DL')\n+        self.logger.info('Subcase: IPV4_GTPU_EH_IPV4 without/with UL/DL')\n+        self.logger.info('Subcase: IPV4_GTPU_EH_IPV4 and IPV4_GTPU_EH_IPV4_UDP')\n+        self.logger.info('Subcase: IPV6_GTPU_EH_IPV6 and IPV6_GTPU_EH_IPV6_TCP')\n+        self.logger.info('Subcase: IPV4_GTPU_EH_IPV6 and IPV4_GTPU_EH_IPV6_UDP without UL/DL')\n+        self.logger.info('Subcase: IPV6_GTPU_IPV4 and IPV6_GTPU_IPV4_TCP')\n+\n+    def test_ipv4_gtpu_ipv4_ipv4_gtpu_eh_ipv4(self):\n+        self.switch_testpmd()\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+            'Ether(dst=\"00:11:22:33:44:55\")/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+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(src=\"192.168.10.1\", dst=\"192.168.0.2\")/(\"X\"*480)'\n+        ]\n+        pkts2 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.10.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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)'\n+        ]\n+        pkts3 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.10.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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)'\n+        ]\n+        rule_li1 = self.rssprocess.create_rule(rule=rules[0])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        rule_li2 = self.rssprocess.create_rule(rule=rules[1])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts3)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\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_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(all([i == '0' for i in hash_value]),\n+                    'got wrong hash, expect not got rss hash and distribute to queue 0')\n+\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2)\n+        self.verify(hash_value[0] != hash_value[1] and hash_value[0] == hash_value[2],\n+                    'got wrong hash, expect 1st hash equal to 3rd and different with 2nd')\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts3)\n+        self.verify(hash_value[0] != hash_value[1] and hash_value[0] == hash_value[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_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2)\n+        self.verify(hash_value[0] != hash_value[1] and hash_value[0] == hash_value[2],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_li2)\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2 + pkts3)\n+        self.verify(all([i == '0' for i in hash_value]),\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(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+                'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)',\n+                'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.10.1\", dst=\"192.168.0.2\")/(\"X\"*480)',\n+        ]\n+\n+        pkts2 = [\n+                'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.10.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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)'\n+        ]\n+\n+        pkts3 = [\n+                'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.10.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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)'\n+        ]\n+        rule_li1 = self.rssprocess.create_rule(rule=rules[0])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        rule_li2 = self.rssprocess.create_rule(rule=rules[1])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts3)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_li2)\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts3 + pkts2)\n+        self.verify(all([i == '0' for i in hash_value]),\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()\n+        rules = [\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+            'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end'\n+        ]\n+        pkts1 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.10.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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)'\n+        ]\n+        pkts2 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.10.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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)'\n+        ]\n+        pkts3 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.10.1\", dst=\"192.168.0.2\")/(\"X\"*480)'\n+        ]\n+        rule1 = self.rssprocess.create_rule(rules[0])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        rule2 = self.rssprocess.create_rule(rules[1])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts3)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule1)\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts1)\n+        self.verify(all([i == '0' for i in hash_value]),\n+                    'got wrong hash, expect not got rss hash and distribute to queue 0')\n+\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts3)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+\n+    def test_ipv4_gtpu_eh_ipv4_and_ipv4_gtpu_eh_ipv4_udp(self):\n+        self.switch_testpmd()\n+        pkts1 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/UDP(sport=22, dport=13)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.10.1\", dst=\"192.168.10.2\")/UDP(sport=12, dport=23)/(\"X\"*480)'\n+        ]\n+        pkts2 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.10.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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)'\n+        ]\n+        rules = [\n+            '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+            '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+        ]\n+\n+        rule_li1 = self.rssprocess.create_rule(rule=rules[0])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        rule_li2 = self.rssprocess.create_rule(rule=rules[1])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        self.rssprocess.destroy_rule(rule_id=rule_li2)\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        rule_li2 = self.rssprocess.create_rule(rule=rules[1])\n+        self.rssprocess.destroy_rule(rule_id=rule_li1)\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+    def test_ipv6_gtpu_eh_ipv6_and_ipv6_gtpu_eh_ipv6_tcp(self):\n+        self.switch_testpmd()\n+        pkts1 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=22, dport=13)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=12, dport=23)/(\"X\"*480)', ]\n+        pkts2 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:1111\")/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:1111\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/(\"X\"*480)'\n+        ]\n+\n+        rules = [\n+            '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+            '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+        ]\n+\n+        rule_li1 = self.rssprocess.create_rule(rule=rules[0])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        rule_li2 = self.rssprocess.create_rule(rule=rules[1])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and 2rd')\n+\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[1] and hash_value[1] == hash_value[2],\n+                    'except all hash same hash')\n+\n+        self.rssprocess.destroy_rule(rule_id=rule_li2)\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2)\n+        self.verify(hash_value[0] != hash_value[1] and hash_value[2] != hash_value[1],\n+                    'except all the packets hash different hash value')\n+\n+    def test_ipv4_gtpu_eh_ipv6_and_ipv4_gtpu_eh_ipv6_udp_without_ul_dl(self):\n+        self.switch_testpmd()\n+        pkts1 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/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)/GTP_PDUSession_ExtensionHeader(qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/UDP(sport=22, dport=13)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:1111\", dst=\"2222:3333:4444:5555:6666:7777:8888:1111\")/UDP(sport=12, dport=23)/(\"X\"*480)'\n+        ]\n+        pkts2 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(qos_flow=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)/GTP_PDUSession_ExtensionHeader(qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:1111\")/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:1111\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/(\"X\"*480)'\n+        ]\n+        rules = [\n+            'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end',\n+            '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+        ]\n+\n+        rule_li1 = self.rssprocess.create_rule(rule=rules[0])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        rule_li2 = self.rssprocess.create_rule(rule=rules[1])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[1] and hash_value[0] != hash_value[2],\n+                    'got wrong hash, expect 1st hash equal to 2nd and different with 3rd')\n+\n+    def test_ipv6_gtpu_ipv4_and_ipv6_gtpu_ipv4_tcp(self):\n+        self.switch_testpmd()\n+        pkts1 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/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)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=12, 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)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:1111\", dst=\"2222:3333:4444:5555:6666:7777:8888:1111\")/TCP(sport=22, dport=13)/(\"X\"*480)'\n+        ]\n+        pkts2 = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/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)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:1111\", 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)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:1111\")/(\"X\"*480)'\n+        ]\n+        rules = [\n+            'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / tcp / end actions rss types ipv6-tcp l4-src-only end key_len 0 queues end / end',\n+            'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end'\n+        ]\n+\n+        rule_li1 = self.rssprocess.create_rule(rule=rules[0])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        rule_li2 = self.rssprocess.create_rule(rule=rules[1])\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts2)\n+        self.verify(hash_value[0] == hash_value[2] and hash_value[0] != hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 3nd and different with 2rd')\n+\n+        hash_value, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts1)\n+        self.verify(hash_value[0] != hash_value[2] and hash_value[0] == hash_value[1],\n+                    'got wrong hash, expect 1st hash equal to 2nd and different with 3rd')\n+\n+    def test_toeplitz_symmetric_combination(self):\n+        self.switch_testpmd()\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 = [\n+                    'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)',\n+                    'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.10.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 =[\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.2\",dst=\"192.168.0.1\")/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.3\",dst=\"192.168.0.8\",frag=6)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.8\",dst=\"192.168.0.3\",frag=6)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.10\",dst=\"192.168.0.20\")/ICMP()/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.20\",dst=\"192.168.0.10\")/ICMP()/(\"X\"*480)',\n+        ]\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], 'expect hash_value[0] == hash_value[1]')\n+        self.verify(hash_value[2] == hash_value[3], 'expect hash_value[2] == hash_value[3]')\n+        self.verify(hash_value[4] == hash_value[5], 'expect hash_value[4] == hash_value[5]')\n+        # step 3\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 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 ptype 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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.10.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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.0.2\",dst=\"192.168.0.1\")/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.0.3\",dst=\"192.168.0.8\",frag=6)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.0.8\",dst=\"192.168.0.3\",frag=6)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.0.10\",dst=\"192.168.0.20\")/ICMP()/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IP(src=\"192.168.0.20\",dst=\"192.168.0.10\")/ICMP()/(\"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], 'expect hash_value[0] == hash_value[1]')\n+        self.verify(hash_value[2] == hash_value[3], 'expect hash_value[2] == hash_value[3]')\n+        self.verify(hash_value[4] == hash_value[5], 'expect hash_value[4] == hash_value[5]')\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+        hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_symmetric)\n+        self.verify(hash_value[0] == hash_value[1], 'expect hash_value[0] == hash_value[1]')\n+        self.verify(hash_value[2] == hash_value[3], 'expect hash_value[2] == hash_value[3]')\n+        self.verify(hash_value[4] == hash_value[5], 'expect hash_value[4] == hash_value[5]')\n+\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(all([i != '0' for i in hash_value]), 'expect symmetric also can work')\n+        hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+        self.verify(len(hash_value) == 0, \"except toeplitz cant't work\")\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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.10.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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/UDP(sport=12, 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)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(src=\"192.168.0.1\", dst=\"192.168.10.2\")/UDP(sport=22, dport=13)/(\"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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IPv6(src=\"2222:3333:4444:5555:6666:7777:8888:9999\",dst=\"1111:2222:3333:4444:5555:6666:7777:8888\")/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:ABCD\",dst=\"1111:2222:3333:4444:5555:6666:7777:1234\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:1234\",dst=\"1111:2222:3333:4444:5555:6666:7777:ABCD\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:1888\",dst=\"2222:3333:4444:5555:6666:7777:8888:1999\")/ICMP()/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IPv6(src=\"2222:3333:4444:5555:6666:7777:8888:1999\",dst=\"1111:2222:3333:4444:5555:6666:7777:1888\")/ICMP()/(\"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 with 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], 'expect hash_value[0] == hash_value[1]')\n+        self.verify(hash_value[2] == hash_value[3], 'expect hash_value[2] == hash_value[3]')\n+        self.verify(hash_value[4] == hash_value[5], 'expect hash_value[4] == hash_value[5]')\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], '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 with hash_value[0]')\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] and hash_value[2] != hash_value[3] and hash_value[4] != hash_value[5],\n+                    'except symmetric 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 different with hash_value[0]')\n+        self.verify(hash_value[3] == hash_value[0], 'hash_value[3] should hash value same with 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], 'expect hash_value[0] == hash_value[1]')\n+        self.verify(hash_value[2] == hash_value[3], 'expect hash_value[2] == hash_value[3]')\n+        self.verify(hash_value[4] == hash_value[5], 'expect hash_value[4] == hash_value[5]')\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], 'expect hash_value[0] == hash_value[1]')\n+        self.verify(hash_value[2] == hash_value[3], 'expect hash_value[2] == hash_value[3]')\n+        self.verify(hash_value[4] == hash_value[5], 'expect hash_value[4] == hash_value[5]')\n+        hash_value, _ = self.rssprocess.send_pkt_get_hash_queues(pkts=pkts_toeplitz)\n+        self.verify(hash_value[0] != hash_value[1] and hash_value[2] != hash_value[3] and hash_value[4] != hash_value[5],\n+                    'except symmetric not work')\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 / ipv6 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only end key_len 0 queues end / end'\n+        pkts_toeplitz = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:1111\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:1111\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=12, dport=13)/(\"X\"*480)'\n+        ]\n+        rule_symmetric = 'flow create 0 ingress pattern eth / ipv6 / udp / gtpu / gtp_psc / ipv6 / tcp / end actions rss types ipv6-tcp l4-src-only end key_len 0 queues end / end'\n+        pkts_symmetric = [\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=12, dport=23)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:1111\", dst=\"2222:3333:4444:5555:6666:7777:8888:1111\")/TCP(sport=22, dport=13)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=12, dport=23)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:1111\", dst=\"2222:3333:4444:5555:6666:7777:8888:1111\")/TCP(sport=22, dport=13)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", dst=\"2222:3333:4444:5555:6666:7777:8888:9999\")/TCP(sport=12, dport=23)/(\"X\"*480)',\n+            'Ether(dst=\"00:11:22:33:44:55\")/IPv6()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTP_PDUSession_ExtensionHeader(qos_flow=0x34)/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:1111\", dst=\"2222:3333:4444:5555:6666:7777:8888:1111\")/TCP(sport=22, dport=13)/(\"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[1] != hash_value[0] and hash_value[2] == hash_value[0],\n+                    'hash_value[0] should hash value different from hash_value[1] and equal to hash_value[2]')\n+        self.verify(hash_value[4] != hash_value[3] and hash_value[5] == hash_value[3],\n+                    'hash_value[3] should hash value different from hash_value[4] and equal to hash_value[5]')\n+        self.verify(hash_value[6] != hash_value[7] and hash_value[6] == hash_value[8],\n+                    'hash_value[6] should hash value different from hash_value[7] and equal to hash_value[8]')\n+        # step 2\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+        # 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(len(hash_value) == 0, 'all the symmetric packet should have no hash value')\n+        self.pmd_output.execute_cmd('flow flush 0')\n+\n+    # iavf gtpc and gtpu\n+    def test_mac_ipv4_gtpu(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_toeplitz)\n+\n+    def test_mac_ipv6_gtpu(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gtpu_toeplitz)\n+\n+    def test_mac_ipv4_gtpc(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpc_toeplitz)\n+\n+    def test_mac_ipv6_gtpc(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gtpc_toeplitz)\n+\n+    def test_mac_ipv4_gtpu_symmetric(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_symmetric_toeplitz)\n+\n+    def test_mac_ipv6_gtpu_symmetric(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gtpu_symmetric_toeplitz)\n+\n+    def test_mac_ipv4_gtpc_symmetric(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpc_symmetric_toeplitz)\n+\n+    def test_mac_ipv6_gtpc_symmetric(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gtpc_symmetric_toeplitz)\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.destroy_vf()\n+        self.dut.kill_all()\n",
    "prefixes": [
        "V1"
    ]
}