get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 83371,
    "url": "https://patches.dpdk.org/api/patches/83371/?format=api",
    "web_url": "https://patches.dpdk.org/project/dts/patch/20201102092120.9146-3-haiyangx.zhao@intel.com/",
    "project": {
        "id": 3,
        "url": "https://patches.dpdk.org/api/projects/3/?format=api",
        "name": "DTS",
        "link_name": "dts",
        "list_id": "dts.dpdk.org",
        "list_email": "dts@dpdk.org",
        "web_url": "",
        "scm_url": "git://dpdk.org/tools/dts",
        "webscm_url": "http://git.dpdk.org/tools/dts/",
        "list_archive_url": "https://inbox.dpdk.org/dts",
        "list_archive_url_format": "https://inbox.dpdk.org/dts/{}",
        "commit_url_format": ""
    },
    "msgid": "<20201102092120.9146-3-haiyangx.zhao@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20201102092120.9146-3-haiyangx.zhao@intel.com",
    "date": "2020-11-02T09:21:14",
    "name": "[V3,2/8] tests/TestSuite_cvl_advanced_rss:update script",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "9feea7524ae85e0a3720ba1eef7804cc5a8a39ca",
    "submitter": {
        "id": 1978,
        "url": "https://patches.dpdk.org/api/people/1978/?format=api",
        "name": "Zhao, HaiyangX",
        "email": "haiyangx.zhao@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dts/patch/20201102092120.9146-3-haiyangx.zhao@intel.com/mbox/",
    "series": [
        {
            "id": 13558,
            "url": "https://patches.dpdk.org/api/series/13558/?format=api",
            "web_url": "https://patches.dpdk.org/project/dts/list/?series=13558",
            "date": "2020-11-02T09:21:12",
            "name": "tests: update or add rss related suites",
            "version": 3,
            "mbox": "https://patches.dpdk.org/series/13558/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/83371/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/83371/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 F07DFA04E7;\n\tMon,  2 Nov 2020 10:22:50 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id A8B6FBE43;\n\tMon,  2 Nov 2020 10:22:49 +0100 (CET)",
            "from mga12.intel.com (mga12.intel.com [192.55.52.136])\n by dpdk.org (Postfix) with ESMTP id EE53572ED\n for <dts@dpdk.org>; Mon,  2 Nov 2020 10:22:45 +0100 (CET)",
            "from fmsmga008.fm.intel.com ([10.253.24.58])\n by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 02 Nov 2020 01:22:44 -0800",
            "from unknown (HELO localhost.localdomain) ([10.240.183.55])\n by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 02 Nov 2020 01:22:37 -0800"
        ],
        "IronPort-SDR": [
            "\n DJld54S+jeeiF6sycBq3tmucaw9rUb2s8xm8FrxS7KxqrGyUoBMR0mJkSEXmLfEsdjttJ5Z/8w\n n/nskEEyER3A==",
            "\n LJJqGNMQE/IFAIY86ofFyJfypi6josBerUlgG3zpjj78H6yo+XPmfM/VALgEMqavjP+2nr5SqI\n jjaLI+MP1mDQ=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9792\"; a=\"148139732\"",
            "E=Sophos;i=\"5.77,444,1596524400\"; d=\"scan'208\";a=\"148139732\"",
            "E=Sophos;i=\"5.77,444,1596524400\"; d=\"scan'208\";a=\"305386237\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "From": "Haiyang Zhao <haiyangx.zhao@intel.com>",
        "To": "dts@dpdk.org,\n\tqi.fu@intel.com",
        "Cc": "Xie wei <weix.xie@intel.com>",
        "Date": "Mon,  2 Nov 2020 17:21:14 +0800",
        "Message-Id": "<20201102092120.9146-3-haiyangx.zhao@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20201102092120.9146-1-haiyangx.zhao@intel.com>",
        "References": "<20201102092120.9146-1-haiyangx.zhao@intel.com>",
        "Subject": "[dts] [PATCH V3 2/8] tests/TestSuite_cvl_advanced_rss:update script",
        "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": "From: Xie wei <weix.xie@intel.com>\n\n* according to test plan, update cvl_advanced_rss script.\n\nSigned-off-by: Xie wei <weix.xie@intel.com>\n---\n tests/TestSuite_cvl_advanced_rss.py | 6944 +++++++++++++++++++++++----\n 1 file changed, 6066 insertions(+), 878 deletions(-)",
    "diff": "diff --git a/tests/TestSuite_cvl_advanced_rss.py b/tests/TestSuite_cvl_advanced_rss.py\nindex 736dcc3..c9c16ec 100644\n--- a/tests/TestSuite_cvl_advanced_rss.py\n+++ b/tests/TestSuite_cvl_advanced_rss.py\n@@ -29,966 +29,6154 @@\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-import json\n-import time\n+\n import re\n-import packet\n-import os\n-from scapy.contrib.gtp import *\n-from test_case import TestCase\n+import random\n+from packet import Packet\n from pmd_output import PmdOutput\n-from utils import BLUE, RED\n-from collections import OrderedDict\n-from packet import IncreaseIP, IncreaseIPv6\n-import rte_flow_common as rfc\n-\n-out = os.popen(\"pip list|grep scapy \")\n-version_result =out.read()\n-p=re.compile('scapy\\s+2\\.3\\.\\d+')\n-m=p.search(version_result)\n-\n-if not m:\n-   GTP_TEID= \"teid\"\n-else:\n-   GTP_TEID= \"TEID\"\n-\n-tv_mac_ipv4_l3_src_only = {\n-    \"name\":\"tv_mac_ipv4_l3_src_only\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.%d\")/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_l3_src_only_frag = {\n-    \"name\":\"tv_mac_ipv4_l3_src_only_frag\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.%d\", frag=5)/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_l3_dst_only = {\n-    \"name\":\"tv_mac_ipv4_l3_dst_only\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.%d\", frag=5)/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_l3_dst_only_frag = {\n-    \"name\":\"tv_mac_ipv4_l3_dst_only_frag\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.%d\", frag=5)/SCTP(sport=%d)/(\"X\"*480)' %(i, i+10) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_l3_src_only_frag_icmp = {\n-    \"name\":\"tv_mac_ipv4_l3_src_only_frag_icmp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.%d\", frag=5)/ICMP()/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_l3_dst_only_frag_icmp = {\n-    \"name\":\"tv_mac_ipv4_l3_dst_only_frag_icmp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.%d\", frag=5)/ICMP()/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_l3_all = {\n-    \"name\":\"tv_mac_ipv4_l3_all\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.%d\", dst=\"192.168.0.%d\")/(\"X\"*480)' %(i, i+10) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_l3_all_frag_icmp = {\n-    \"name\":\"tv_mac_ipv4_l3_all_frag_icmp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.%d\", dst=\"192.168.0.%d\")/ICMP()/(\"X\"*480)' %(i, i+10) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_l3_all_nvgre_frag_icmp = {\n-    \"name\":\"tv_mac_ipv4_l3_all_nvgre_frag_icmp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IP(src=\"192.168.0.%d\", dst=\"192.168.0.%d\")/ICMP()/(\"X\"*480)' %(i, i+10) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_l3_src_nvgre_frag_icmp = {\n-    \"name\":\"tv_mac_ipv4_l3_src_nvgre_frag_icmp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IP(src=\"192.168.0.%d\", frag=5)/ICMP()/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_l3_dst_nvgre_frag_icmp = {\n-    \"name\":\"tv_mac_ipv4_l3_dst_nvgre_frag_icmp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.%d\", frag=5)/ICMP()/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+from test_case import TestCase\n+from rte_flow_common import RssProcessing\n+\n+# toeplitz related data start\n+mac_ipv4_toeplitz_basic_pkt = {\n+    'ipv4-nonfrag': [\n+       'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+    ],\n+    'ipv4-frag': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+    ],\n+    'ipv4-icmp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+    ],\n+    'ipv4-tcp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n+    'ipv4-udp-vxlan': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n }\n \n-tv_mac_ipv4_l3_src_vxlan_frag_icmp = {\n-    \"name\":\"tv_mac_ipv4_l3_src_vxlan_frag_icmp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end\",    \n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.%d\",frag=5)/ICMP()/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_udp_toeplitz_basic_pkt = {\n+    'ipv4-udp': [\n+       'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n+    'nvgre': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n }\n \n-tv_mac_ipv4_l3_dst_vxlan_frag_icmp = {\n-    \"name\":\"tv_mac_ipv4_l3_dst_vxlan_frag_icmp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.%d\",frag=5)/ICMP()/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_udp_toeplitz_non_basic_pkt = [\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/Raw(\"x\"*80)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ]\n+\n+mac_ipv4_tcp_toeplitz_basic_pkt = {\n+    'ipv4-tcp': [\n+       'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n+    'nvgre': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n }\n \n-tv_mac_ipv4_l3_all_vxlan_frag_icmp = {\n-    \"name\":\"tv_mac_ipv4_l3_all_vxlan_frag_icmp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.%d\", dst=\"192.168.0.%d\", frag=5)/ICMP()/(\"X\"*480)' %(i, i+10) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_tcp_toeplitz_non_basic_pkt = [\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/Raw(\"x\"*80)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)'\n+    ]\n+\n+mac_ipv4_sctp_toeplitz_basic_pkt = {\n+    'ipv4-sctp': [\n+       'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n+    'nvgre': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n }\n \n-tv_mac_ipv6_l3_src = {\n-    \"name\":\"tv_mac_ipv6_l3_src\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"2001::%d\")/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_sctp_toeplitz_non_basic_pkt = [\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/Raw(\"x\"*80)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ]\n+\n+mac_ipv6_toeplitz_basic_pkt = {\n+    'ipv6-nonfrag': [\n+       'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+    ],\n+    'ipv6-frag': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+    ],\n+    'ipv6-icmp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+    ],\n+    'ipv6-udp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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+    'nvgre': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+    ],\n }\n \n-tv_mac_ipv6_l3_src_frag = {\n-    \"name\":\"tv_mac_ipv6_l3_src_frag\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"2001::%d\")/IPv6ExtHdrFragment()/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv6_toeplitz_non_basic_pkt = [\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+    ]\n+\n+mac_ipv6_udp_toeplitz_basic_pkt = {\n+    'ipv6-udp': [\n+       'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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+    'ipv4_udp_vxlan_ipv6_udp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/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 }\n \n-tv_mac_ipv6_l3_dst_frag = {\n-    \"name\":\"tv_mac_ipv6_l3_dst_frag\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(dst=\"2001::%d\")/IPv6ExtHdrFragment()/(\"X\"*480)' %i for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv6_udp_toeplitz_non_basic_pkt = [\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")/UDP(sport=22,dport=23)/Raw(\"x\"*80)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ]\n+\n+mac_ipv6_tcp_toeplitz_basic_pkt = {\n+    'ipv6-tcp': [\n+       'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n+    'ipv4_tcp_vxlan_ipv6_tcp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n }\n \n-tv_mac_ipv6_l3_all_frag_icmp = {\n-    \"name\":\"tv_mac_ipv6_l3_all_frag_icmp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"2001::%d\", dst=\"2001::%d\")/IPv6ExtHdrFragment()/ICMP()/(\"X\"*480)' %(i, i+10) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv6_tcp_toeplitz_non_basic_pkt = [\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")/TCP(sport=22,dport=23)/Raw(\"x\"*80)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/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+\n+mac_ipv6_sctp_toeplitz_basic_pkt = {\n+    'ipv6-sctp': [\n+       'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n+    'ipv4_sctp_vxlan_ipv6_sctp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n }\n \n-tv_mac_ipv4_udp_l3src_l4dst = {\n-    \"name\":\"tv_mac_ipv4_udp_l3src_l4dst\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.%d\")/UDP(dport=%d)/(\"X\"*480)' %(i, i+10) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv6_sctp_toeplitz_non_basic_pkt = [\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")/SCTP(sport=22,dport=23)/Raw(\"x\"*80)',\n+    'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ]\n+\n+mac_ipv4_l2src_changed = {\n+    'ipv4-nonfrag': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+    ],\n+    'ipv4-frag': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+    ],\n+    'ipv4-icmp': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+    ],\n+    'ipv4-tcp': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n+    'ipv4-udp-vxlan': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n }\n \n-tv_mac_ipv4_udp_all_frag = {\n-    \"name\":\"tv_mac_ipv4_udp_all_frag\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.%d\", dst=\"192.168.0.%d\")/UDP(sport=%d, dport=%d)/(\"X\"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_l2dst_changed = {\n+    'ipv4-nonfrag': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+    ],\n+    'ipv4-frag': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+    ],\n+    'ipv4-icmp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+    ],\n+    'ipv4-tcp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n+    'ipv4-udp-vxlan': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n }\n \n-tv_mac_ipv4_udp_nvgre = {\n-    \"name\":\"tv_mac_ipv4_udp_nvgre\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IP(src=\"192.168.0.%d\", dst=\"192.168.0.%d\")/UDP(sport=%d, dport=%d)/(\"X\"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_l3src_changed = {\n+    'ipv4-nonfrag': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/(\"X\"*480)',\n+    ],\n+    'ipv4-frag': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\", frag=6)/(\"X\"*480)',\n+    ],\n+    'ipv4-icmp': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/ICMP()/(\"X\"*480)',\n+    ],\n+    'ipv4-tcp': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n+    'ipv4-udp-vxlan': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n }\n \n-tv_mac_ipv4_udp_vxlan= {\n-    \"name\":\"tv_mac_ipv4_udp_vxlan\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end\",    \n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.%d\", dst=\"192.168.0.%d\")/UDP(sport=%d, dport=%d)/(\"X\"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_l3dst_changed = {\n+    'ipv4-nonfrag': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+    ],\n+    'ipv4-frag': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\", frag=6)/(\"X\"*480)',\n+    ],\n+    'ipv4-icmp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+    ],\n+    'ipv4-tcp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n+    'ipv4-udp-vxlan': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+    ],\n }\n \n-tv_mac_ipv6_udp_all= {\n-    \"name\":\"tv_mac_ipv6_udp_all\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"2001::%d\")/UDP(sport=%d, dport=%d)/(\"X\"*480)' %(i, i+10, i+50) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv6_l2src_changed = {\n+    'ipv6-nonfrag': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+    ],\n+    'ipv6-frag': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+    ],\n+    'ipv6-icmp': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+    ],\n+    'ipv6-udp': [\n+        'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/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 }\n \n+mac_ipv6_l2dst_changed = {\n+    'ipv6-nonfrag': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/(\"X\"*480)',\n+    ],\n+    'ipv6-frag': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+    ],\n+    'ipv6-icmp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/ICMP()/(\"X\"*480)',\n+    ],\n+    'ipv6-udp': [\n+        'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/UDP(sport=25,dport=99)/(\"X\"*480)',\n+    ],\n+}\n \n-tv_mac_ipv6_udp_all_frag= {\n-    \"name\":\"tv_mac_ipv6_udp_all_frag\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"2001::%d\")/IPv6ExtHdrFragment()/UDP(sport=%d, dport=%d)/(\"X\"*480)' %(i, i+10, i+50) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+#mac_ipv4\n+mac_ipv4_l2_src = {\n+    'sub_casename': 'mac_ipv4_l2_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-nonfrag'],\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-nonfrag'],\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],\n+            'action': {'save_hash': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-frag'],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-frag'],\n+            'action': {'check_hash_same': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],\n+            'action': {'save_hash': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-icmp'],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-icmp'],\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],\n+            'action': {'save_hash': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},\n+        }\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],\n+                ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n }\n \n-tv_mac_ipv4_tcp_l3src_l4dst= {\n-    \"name\":\"tv_mac_ipv4_tcp_l3src_l4dst\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.%d\")/TCP(dport=%d)/(\"X\"*480)' %(i, i+10) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_l2_dst = {\n+    'sub_casename': 'mac_ipv4_l2dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],\n+            'action': {'save_hash': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-nonfrag'],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-nonfrag'],\n+            'action': {'check_hash_same': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],\n+            'action': {'save_hash': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-frag'],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-frag'],\n+            'action': {'check_hash_same': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],\n+            'action': {'save_hash': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-icmp'],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-icmp'],\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],\n+            'action': {'save_hash': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},\n+        }\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],\n+            ],\n+            'action': {'check_no_hash': ''},\n+        },\n+    ],\n }\n \n-tv_mac_ipv4_tcp_l3dst_l4src= {\n-    \"name\":\"tv_mac_ipv4_tcp_l3dst_l4src\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.%d\")/TCP(sport=%d)/(\"X\"*480)' %(i, i+10) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_l2src_l2dst = {\n+    'sub_casename': 'mac_ipv4_l2src_l2dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],\n+            'action': {'save_hash': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-nonfrag'],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-nonfrag'],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],\n+            'action': {'save_hash': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-frag'],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-frag'],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\",frag=7)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],\n+            'action': {'save_hash': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-icmp'],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-icmp'],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],\n+            'action': {'save_hash': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2dst_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l2src_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/TCP(sport=23,dport=25)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},\n+        }\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],\n+            ],\n+            'action': {'check_no_hash': ''},\n+        },\n+    ],\n }\n \n-tv_mac_ipv4_tcp_all= {\n-    \"name\":\"tv_mac_ipv4_tcp_all\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.%d\",dst=\"192.168.0.%d\")/TCP(sport=%d,dport=%d)/(\"X\"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_l3_src = {\n+    'sub_casename': 'mac_ipv4_l3src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],\n+            'action': {'save_hash': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-nonfrag'],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-nonfrag'],\n+            'action': {'check_hash_same': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],\n+            'action': {'save_hash': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-frag'],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-frag'],\n+            'action': {'check_hash_same': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],\n+            'action': {'save_hash': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-icmp'],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-icmp'],\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],\n+            'action': {'save_hash': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},\n+        }\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],\n+            ],\n+            'action': {'check_no_hash': ''},\n+        },\n+    ],\n }\n \n-tv_mac_ipv4_tcp_all_nvgre_frag= {\n-    \"name\":\"tv_mac_ipv4_tcp_all_nvgre_frag\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IP(src=\"192.168.0.%d\", dst=\"192.168.0.%d\")/TCP(sport=%d, dport=%d)/(\"X\"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_l3_dst = {\n+    'sub_casename': 'mac_ipv4_l3dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],\n+            'action': {'save_hash': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-nonfrag'],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-nonfrag'],\n+            'action': {'check_hash_same': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],\n+            'action': {'save_hash': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-frag'],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-frag'],\n+            'action': {'check_hash_same': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],\n+            'action': {'save_hash': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-icmp'],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-icmp'],\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],\n+            'action': {'save_hash': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},\n+        }\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],\n+            ],\n+            'action': {'check_no_hash': ''},\n+        },\n+    ],\n }\n \n-tv_mac_ipv4_tcp_all_vxlan_frag= {\n-    \"name\":\"tv_mac_ipv4_tcp_all_vxlan_frag\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.%d\", dst=\"192.168.0.%d\")/TCP(sport=%d, dport=%d)/(\"X\"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_all = {\n+    'sub_casename': 'mac_ipv4_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],\n+            'action': {'save_hash': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-nonfrag'],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-nonfrag'],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],\n+            'action': {'save_hash': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-frag'],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-frag'],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],\n+            'action': {'save_hash': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-icmp'],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-icmp'],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],\n+            'action': {'save_hash': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3dst_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_l3src_changed['ipv4-udp-vxlan'],\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},\n+        }\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],\n+            ],\n+            'action': {'check_no_hash': ''},\n+        },\n+    ],\n }\n \n-tv_mac_ipv6_tcp_all= {\n-    \"name\":\"tv_mac_ipv6_tcp_all\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"2001::%d\")/TCP(sport=%d, dport=%d)/(\"X\"*480)' %(i, i+10, i+50) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+#mac ipv4_udp\n+mac_ipv4_udp_l2_src = {\n+    'sub_casename': 'mac_ipv4_udp_l2_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/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+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/UDP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n }\n \n-tv_mac_ipv6_tcp_all_frag= {\n-    \"name\":\"tv_mac_ipv6_tcp_all_frag\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"2001::%d\")/IPv6ExtHdrFragment()/TCP(sport=%d, dport=%d)/(\"X\"*480)' %(i, i+10, i+50) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_udp_l2_dst = {\n+    'sub_casename': 'mac_ipv4_udp_l2_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/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+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/UDP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n }\n \n-tv_mac_ipv4_sctp_l3src_l4dst= {\n-    \"name\":\"tv_mac_ipv4_sctp_l3src_l4dst\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp l3-src-only l4-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.%d\")/SCTP(dport=%d)/(\"X\"*480)' %(i, i+10) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_udp_l2src_l2dst = {\n+    'sub_casename': 'mac_ipv4_udp_l2src_l2dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/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+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/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+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/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+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/UDP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n }\n \n-tv_mac_ipv4_sctp_all_frag= {\n-    \"name\":\"tv_mac_ipv4_sctp_all_frag\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.%d\",dst=\"192.168.0.%d\", frag=4)/SCTP(sport=%d,dport=%d)/(\"X\"*480)' %(i, i+10,i+50,i+55) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_udp_l3_src = {\n+    'sub_casename': 'mac_ipv4_udp_l3_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n }\n \n-tv_mac_ipv4_sctp_nvgre= {\n-    \"name\":\"tv_mac_ipv4_sctp_nvgre\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IP(src=\"192.168.0.%d\",dst=\"192.168.0.%d\", frag=4)/SCTP(sport=%d,dport=%d)/(\"X\"*480)' %(i, i+10,i+50,i+55) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_udp_l3_dst = {\n+    'sub_casename': 'mac_ipv4_udp_l3_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n }\n \n-tv_mac_ipv4_sctp_vxlan= {\n-    \"name\":\"tv_mac_ipv4_sctp_vxlan\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.%d\",dst=\"192.168.0.%d\")/SCTP(sport=%d,dport=%d)/(\"X\"*480)' %(i, i+10,i+50,i+55) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_udp_l3src_l4src = {\n+    'sub_casename': 'mac_ipv4_udp_l3src_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n }\n \n-tv_mac_ipv6_sctp_all= {\n-    \"name\":\"tv_mac_ipv6_sctp_all\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"2001::%d\")/SCTP(sport=%d, dport=%d)/(\"X\"*480)' %(i, i+10, i+50) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n+mac_ipv4_udp_l3src_l4dst = {\n+    'sub_casename': 'mac_ipv4_udp_l3src_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n \n-tv_mac_ipv4_pppod_pppoe= {\n-    \"name\":\"tv_mac_ipv4_pppod_pppoe\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src=\"192.168.0.%d\")/UDP(sport=%d)/(\"X\"*480)' %(i, i+10,i+50) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_pppoe_all= {\n-    \"name\":\"tv_mac_ipv4_pppoe_all\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src=\"192.168.0.%d\",dst=\"192.168.0.%d\")/(\"X\"*480)' %(i, i+10,i+50) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_pppoe_udp= {\n-    \"name\":\"tv_mac_ipv4_pppoe_udp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src=\"192.168.0.%d\")/UDP(dport=%d)/(\"X\"*480)' %(i, i+10,i+50) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_pppoe_tcp= {\n-    \"name\":\"tv_mac_ipv4_pppoe_tcp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src=\"192.168.0.%d\")/TCP(sport=%d)/(\"X\"*480)' %(i, i+10,i+50) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_pppoe_sctp= {\n-    \"name\":\"tv_mac_ipv4_pppoe_sctp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / pppoes / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src=\"192.168.0.%d\")/SCTP(dport=%d)/(\"X\"*480)' %(i, i+10,i+50) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_pppoe_icmp= {\n-    \"name\":\"tv_mac_ipv4_pppoe_icmp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src=\"192.168.0.%d\")/ICMP()/(\"X\"*480)' %(i, i+10) for i in range(0,100)],\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-pkt_str=[]\n-pkt = ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP(dport=2152)/GTP_U_Header(GTP_TEID=0x123456)/IP(src=\"192.168.0.%d\")/ICMP()/(\"X\"*480)' %i for i in range(0,100)]\n-for i in pkt:\n-    pkt_str.append(i.replace('GTP_TEID', GTP_TEID))\n-\n-tv_mac_ipv4_gtpu_icmp= {\n-    \"name\":\"tv_mac_ipv4_gtpu_icmp\",\n-    \"rte_flow_pattern\":\"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-    \"scapy_str\":pkt_str,\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-pkt_str=[]\n-pkt = ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP(dport=2152)/GTP_U_Header(GTP_TEID=0x123456)/IP(src=\"192.168.0.%d\", frag=6)/UDP(dport=%d)/(\"X\"*480)' %(i, i+10) for i in range(0,100)]\n-for i in pkt:\n-    pkt_str.append(i.replace('GTP_TEID', GTP_TEID))\n-\n-tv_mac_ipv4_gtpu_udp_frag= {\n-    \"name\":\"tv_mac_ipv4_gtpu_udp_frag\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\":pkt_str,\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-pkt_str=[]\n-pkt = ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP(dport=2152)/GTP_U_Header(GTP_TEID=0x123456)/IP(src=\"192.168.0.%d\", frag=6)/(\"X\"*480)' %i for i in range(0,100)]\n-for i in pkt:\n-    pkt_str.append(i.replace('GTP_TEID', GTP_TEID))\n-\n-tv_mac_ipv4_gtpu_ipv4_frag= {\n-    \"name\":\"tv_mac_ipv4_gtpu_ipv4_frag\",\n-    \"rte_flow_pattern\":\"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-    \"scapy_str\":pkt_str,\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-pkt_str=[]\n-pkt =['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP(dport=2152)/GTP_U_Header(GTP_TEID=0x123456)/IP(src=\"192.168.0.%d\", frag=6)/TCP(dport=%d)/(\"X\"*480)' %(i, i+10) for i in range(0,100)]\n-for i in pkt:\n-    pkt_str.append(i.replace('GTP_TEID', GTP_TEID))\n-\n-tv_mac_ipv4_gtpu_tcp= {\n-    \"name\":\"tv_mac_ipv4_gtpu_tcp\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / tcp / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\":pkt_str,\n-    \"check_func\": rfc.check_packets_of_each_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n+mac_ipv4_udp_l3dst_l4src = {\n+    'sub_casename': 'mac_ipv4_udp_l3dst_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n }\n \n-tvs_mac_rss_ipv4 = [\n-    tv_mac_ipv4_l3_src_only,\n-    tv_mac_ipv4_l3_src_only_frag,\n-    tv_mac_ipv4_l3_dst_only,\n-    tv_mac_ipv4_l3_all\n-    ]\n-\n-tvs_mac_rss_ipv4_port = [\n-    tv_mac_ipv4_l3_src_only_frag_icmp,\n-    tv_mac_ipv4_l3_dst_only_frag_icmp,\n-    tv_mac_ipv4_l3_all_frag_icmp,\n-    tv_mac_ipv4_udp_l3src_l4dst,\n-    tv_mac_ipv4_udp_all_frag,\n-    tv_mac_ipv4_tcp_l3src_l4dst,\n-    tv_mac_ipv4_tcp_l3dst_l4src,\n-    tv_mac_ipv4_tcp_all,\n-    tv_mac_ipv4_sctp_l3src_l4dst,\n-    tv_mac_ipv4_sctp_all_frag\n-    ]\n+mac_ipv4_udp_l3dst_l4dst = {\n+    'sub_casename': 'mac_ipv4_udp_l3dst_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n \n-tvs_mac_rss_ipv4_nvgre = [\n-    tv_mac_ipv4_l3_all_nvgre_frag_icmp,\n-    tv_mac_ipv4_l3_src_nvgre_frag_icmp,\n-    tv_mac_ipv4_l3_dst_nvgre_frag_icmp,\n-    tv_mac_ipv4_tcp_all_nvgre_frag,\n-    tv_mac_ipv4_sctp_nvgre\n-    ]\n-tvs_mac_rss_ipv4_vxlan =[\n-    tv_mac_ipv4_l3_src_vxlan_frag_icmp,\n-    tv_mac_ipv4_l3_dst_vxlan_frag_icmp,\n-    tv_mac_ipv4_l3_all_vxlan_frag_icmp,\n-    tv_mac_ipv4_tcp_all_vxlan_frag,\n-    tv_mac_ipv4_sctp_vxlan,\n-    tv_mac_ipv4_udp_vxlan\n-    ]\n+mac_ipv4_udp_l4_src = {\n+    'sub_casename': 'mac_ipv4_udp_l4_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n \n-tvs_mac_rss_ipv6 =[\n-    tv_mac_ipv6_l3_src,\n-    tv_mac_ipv6_l3_src_frag,\n-    tv_mac_ipv6_l3_dst_frag,\n-    tv_mac_ipv6_l3_all_frag_icmp,\n-    tv_mac_ipv6_udp_all,\n-    tv_mac_ipv6_udp_all_frag,\n-    tv_mac_ipv6_tcp_all,\n-    tv_mac_ipv6_tcp_all_frag,\n-    tv_mac_ipv6_sctp_all\n-]\n-    \n-tvs_mac_rss_ipv4_pppoe =[\n-    tv_mac_ipv4_pppod_pppoe,\n-    tv_mac_ipv4_pppoe_all,\n-    tv_mac_ipv4_pppoe_tcp,\n-    tv_mac_ipv4_pppoe_sctp,\n-    tv_mac_ipv4_pppoe_icmp\n-    ]\n-tvs_mac_rss_ipv4_gtp =[\n-    tv_mac_ipv4_gtpu_icmp,\n-    tv_mac_ipv4_gtpu_udp_frag,\n-    tv_mac_ipv4_gtpu_ipv4_frag,\n-    tv_mac_ipv4_gtpu_tcp\n-    ]\n+mac_ipv4_udp_l4_dst = {\n+    'sub_casename': 'mac_ipv4_udp_l4_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n \n-tv_mac_ipv4_symmetric_toeplitz = {\n-    \"name\": \"tv_mac_ipv4_symmetric_toeplitz\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\")/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.2\",dst=\"192.168.0.1\")/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\": 0}\n-}    \n-\n-tv_mac_ipv4_frag_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv4_frag_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\",frag=6)/(\"X\"*480)',\n-                 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.2\",dst=\"192.168.0.1\",frag=6)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_udp_frag_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv4_udp_frag_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\",frag=6)/UDP(sport=20,dport=22)/(\"X\"*480)',\n-                 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.2\",dst=\"192.168.0.1\",frag=6)/UDP(sport=22,dport=20)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_udp_frag_symmetric_toeplitz_all= {\n-    \"name\":\"tv_mac_ipv4_udp_frag_symmetric_toeplitz_all\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp l3-src-only l3-dst-only l4-src-only l4-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"1.1.4.1\",dst=\"2.2.2.3\")/UDP(sport=20,dport=22)/(\"X\"*480)',\n-                 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"2.2.2.3\",dst=\"1.1.4.1\")/UDP(sport=22,dport=20)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_tcp_frag_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv4_tcp_frag_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\",frag=6)/TCP(sport=20,dport=22)/(\"X\"*480)',\n-                 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.2\",dst=\"192.168.0.1\",frag=6)/TCP(sport=22,dport=20)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_sctp_frag_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv4_sctp_frag_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss func symmetric_toeplitz types ipv4-sctp end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\",frag=6)/SCTP(sport=20,dport=22)/(\"X\"*480)',\n-                 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.2\",dst=\"192.168.0.1\",frag=6)/SCTP(sport=22,dport=20)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_icmp_frag_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv4_icmp_frag_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\",frag=6)/ICMP()/(\"X\"*480)',\n-                 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"192.168.0.2\",dst=\"192.168.0.1\",frag=6)/ICMP()/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end\",\n-    \"scapy_str\":['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n-                 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_frag_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_frag_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_udp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_udp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/UDP(sport=30,dport=32)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=30)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_tcp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_tcp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/TCP(sport=30,dport=32)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=30)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_sctp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_sctp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss func symmetric_toeplitz types ipv6-sctp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/SCTP(sport=30,dport=32)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=30)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_icmp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_icmp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/ICMP()/(\"X\"*480)',\n-                'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_nvgre_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv4_nvgre_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end \",\n-    \"scapy_str\": ['Ether()/IP()/NVGRE()/Ether()/IP(src=\"192.168.0.8\",dst=\"192.168.0.69\",frag=6)/(\"X\"*480)',\n-                  'Ether()/IP()/NVGRE()/Ether()/IP(src=\"192.168.0.69\",dst=\"192.168.0.8\",frag=6)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_vxlan_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv4_vxlan_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\",frag=6)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.2\",dst=\"192.168.0.1\",frag=6)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_nvgre_udp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv4_nvgre_udp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"8.8.8.1\",dst=\"5.6.8.2\")/UDP(sport=20,dport=22)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"5.6.8.2\",dst=\"8.8.8.1\")/UDP(sport=22,dport=20)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_nvgre_sctp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv4_nvgre_sctp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss func symmetric_toeplitz types ipv4-sctp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"8.8.8.1\",dst=\"5.6.8.2\")/SCTP(sport=20,dport=22)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"5.6.8.2\",dst=\"8.8.8.1\")/SCTP(sport=22,dport=20)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_nvgre_tcp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv4_nvgre_tcp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"8.8.8.1\",dst=\"5.6.8.2\")/TCP(sport=20,dport=22)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether(dst=\"68:05:ca:a3:28:94\")/IP(src=\"5.6.8.2\",dst=\"8.8.8.1\")/TCP(sport=22,dport=20)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_nvgre_icmp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv4_nvgre_icmp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IP(src=\"8.8.8.1\",dst=\"5.6.8.2\")/ICMP()/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IP(src=\"5.6.8.2\",dst=\"8.8.8.1\")/ICMP()/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_nvgre_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_nvgre_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_nvgre_udp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_nvgre_udp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/UDP(sport=30,dport=32)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=30)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_nvgre_tcp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_nvgre_tcp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/TCP(sport=30,dport=32)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=30)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_nvgre_sctp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_nvgre_sctp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss func symmetric_toeplitz types ipv6-sctp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/SCTP(sport=30,dport=32)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=30)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_nvgre_icmp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_nvgre_icmp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/ICMP()/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_vxlan_udp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_vxlan_udp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/UDP(sport=30,dport=32)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=30)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_vxlan_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_vxlan_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP()/VXLAN()/Ether()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IP()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_vxlan_tcp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_vxlan_tcp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/TCP(sport=30,dport=32)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=30)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_vxlan_sctp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_vxlan_sctp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss func symmetric_toeplitz types ipv6-sctp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/SCTP(sport=30,dport=32)/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=30)/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_vxlan_icmp_symmetric_toeplitz= {\n-    \"name\":\"tv_mac_ipv6_vxlan_icmp_symmetric_toeplitz\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"68:05:ca:a3:28:94\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/ICMP()/(\"X\"*480)',\n-                  'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)'],\n-    \"check_func\": rfc.check_symmetric_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv4_simple_xor= {\n-    \"name\":\"tv_mac_ipv4_simple_xor\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern end actions rss func simple_xor key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether()/IP(src=\"1.1.4.1\",dst=\"2.2.2.3\")/(\"X\"*480)',\n-                  'Ether()/IP(src=\"2.2.2.3\",dst=\"1.1.4.1\")/(\"X\"*480)'],\n-    \"check_func\": rfc.check_simplexor_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tv_mac_ipv6_simple_xor= {\n-    \"name\":\"tv_mac_ipv6_sctp_simple_xor\",\n-    \"rte_flow_pattern\":\"flow create 0 ingress pattern end actions rss func simple_xor key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/ICMP()/(\"X\"*480)',\n-                  'Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)'],\n-    \"check_func\": rfc.check_simplexor_queue,\n-    \"check_func_param\": {\"expect_port\":0}\n-}\n-\n-tvs_mac_rss_ipv4_symmetric_toeplitz = [\n-    tv_mac_ipv4_symmetric_toeplitz,\n-    tv_mac_ipv4_frag_symmetric_toeplitz,\n-    tv_mac_ipv4_udp_frag_symmetric_toeplitz,\n-    tv_mac_ipv4_udp_frag_symmetric_toeplitz_all,\n-    tv_mac_ipv4_tcp_frag_symmetric_toeplitz,\n-    tv_mac_ipv4_sctp_frag_symmetric_toeplitz,\n-    tv_mac_ipv4_icmp_frag_symmetric_toeplitz\n-    ]\n+mac_ipv4_udp_all = {\n+    'sub_casename': 'mac_ipv4_udp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],\n+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n \n-tvs_mac_rss_ipv6_symmetric_toeplitz = [\n-    tv_mac_ipv6_symmetric_toeplitz,\n-    tv_mac_ipv6_frag_symmetric_toeplitz,\n-    tv_mac_ipv6_udp_symmetric_toeplitz,\n-    tv_mac_ipv6_tcp_symmetric_toeplitz,\n-    tv_mac_ipv6_sctp_symmetric_toeplitz,\n-    tv_mac_ipv6_icmp_symmetric_toeplitz\n-    ]\n+#mac ipv4_tcp\n+mac_ipv4_tcp_l2_src = {\n+    'sub_casename': 'mac_ipv4_tcp_l2_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/TCP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n \n-tvs_mac_rss_ipv4_symmetric_toeplitz_nvgre = [\n-    tv_mac_ipv4_nvgre_symmetric_toeplitz,\n-    tv_mac_ipv4_nvgre_udp_symmetric_toeplitz,\n-    tv_mac_ipv4_nvgre_sctp_symmetric_toeplitz,\n-    tv_mac_ipv4_nvgre_tcp_symmetric_toeplitz,\n-    tv_mac_ipv4_nvgre_icmp_symmetric_toeplitz\n-    ]\n+mac_ipv4_tcp_l2_dst = {\n+    'sub_casename': 'mac_ipv4_tcp_l2_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/TCP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n \n-tvs_mac_rss_ipv6_symmetric_toeplitz_nvgre = [\n-    tv_mac_ipv6_nvgre_symmetric_toeplitz,\n-    tv_mac_ipv6_nvgre_udp_symmetric_toeplitz,\n-    tv_mac_ipv6_nvgre_tcp_symmetric_toeplitz,\n-    tv_mac_ipv6_nvgre_sctp_symmetric_toeplitz,\n-    tv_mac_ipv6_nvgre_icmp_symmetric_toeplitz\n-    ]\n+mac_ipv4_tcp_l2src_l2dst = {\n+    'sub_casename': 'mac_ipv4_tcp_l2src_l2dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/TCP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n \n-tvs_mac_rss_symmetric_toeplitz_vxlan = [\n-    tv_mac_ipv4_vxlan_symmetric_toeplitz,\n-    tv_mac_ipv6_vxlan_udp_symmetric_toeplitz,\n-    tv_mac_ipv6_vxlan_symmetric_toeplitz,\n-    tv_mac_ipv6_vxlan_tcp_symmetric_toeplitz,\n-    tv_mac_ipv6_vxlan_icmp_symmetric_toeplitz\n-    ]\n+mac_ipv4_tcp_l3_src = {\n+    'sub_casename': 'mac_ipv4_tcp_l3_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n \n-tvs_mac_rss_simple_xor = [\n-    tv_mac_ipv4_simple_xor,\n-    tv_mac_ipv6_simple_xor\n-    ]\n+mac_ipv4_tcp_l3_dst = {\n+    'sub_casename': 'mac_ipv4_tcp_l3_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_tcp_l3src_l4src = {\n+    'sub_casename': 'mac_ipv4_tcp_l3src_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_tcp_l3src_l4dst = {\n+    'sub_casename': 'mac_ipv4_tcp_l3src_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_tcp_l3dst_l4src = {\n+    'sub_casename': 'mac_ipv4_tcp_l3dst_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_tcp_l3dst_l4dst = {\n+    'sub_casename': 'mac_ipv4_tcp_l3dst_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_tcp_l4_src = {\n+    'sub_casename': 'mac_ipv4_tcp_l4_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_tcp_l4_dst = {\n+    'sub_casename': 'mac_ipv4_tcp_l4_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_tcp_all = {\n+    'sub_casename': 'mac_ipv4_tcp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],\n+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+#mac ipv4_sctp\n+mac_ipv4_sctp_l2_src = {\n+    'sub_casename': 'mac_ipv4_sctp_l2_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types eth l2-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/SCTP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_l2_dst = {\n+    'sub_casename': 'mac_ipv4_sctp_l2_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/SCTP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_l2src_l2dst = {\n+    'sub_casename': 'mac_ipv4_sctp_l2src_l2dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types eth end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/SCTP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_l3_src = {\n+    'sub_casename': 'mac_ipv4_sctp_l3_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_l3_dst = {\n+    'sub_casename': 'mac_ipv4_sctp_l3_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_l3src_l4src = {\n+    'sub_casename': 'mac_ipv4_sctp_l3src_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp l3-src-only l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_l3src_l4dst = {\n+    'sub_casename': 'mac_ipv4_sctp_l3src_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp l3-src-only l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_l3dst_l4src = {\n+    'sub_casename': 'mac_ipv4_sctp_l3dst_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp l3-dst-only l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_l3dst_l4dst = {\n+    'sub_casename': 'mac_ipv4_sctp_l3dst_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp l3-dst-only l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_l4_src = {\n+    'sub_casename': 'mac_ipv4_sctp_l4_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_l4_dst = {\n+    'sub_casename': 'mac_ipv4_sctp_l4_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_all = {\n+    'sub_casename': 'mac_ipv4_sctp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],\n+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+#mac_ipv6\n+mac_ipv6_l2_src = {\n+    'sub_casename': 'mac_ipv6_l2_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],\n+            'action': {'save_hash': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],\n+            'action': {'save_hash': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],\n+            'action': {'save_hash': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'save_hash': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/UDP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_l2_dst = {\n+    'sub_casename': 'mac_ipv6_l2dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],\n+            'action': {'save_hash': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],\n+            'action': {'save_hash': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2027\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],\n+            'action': {'save_hash': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2027\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'save_hash': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2027\")/UDP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+            ],\n+            'action': {'check_no_hash': ''},\n+        },\n+    ],\n+}\n+\n+mac_ipv6_l2src_l2dst = {\n+    'sub_casename': 'mac_ipv6_l2src_l2dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types eth end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],\n+            'action': {'save_hash': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],\n+            'action': {'save_hash': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],\n+            'action': {'save_hash': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'save_hash': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/UDP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+            ],\n+            'action': {'check_no_hash': ''},\n+        },\n+    ],\n+}\n+\n+mac_ipv6_l3_src = {\n+    'sub_casename': 'mac_ipv6_l3src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],\n+            'action': {'save_hash': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],\n+            'action': {'save_hash': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],\n+            'action': {'save_hash': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'save_hash': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'],\n+            'action': {'save_hash': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'nvgre'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': {'check_no_hash': ''},\n+        },\n+    ],\n+}\n+\n+mac_ipv6_l3_dst = {\n+    'sub_casename': 'mac_ipv6_l3dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],\n+            'action': {'save_hash': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],\n+            'action': {'save_hash': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],\n+            'action': {'save_hash': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'save_hash': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'],\n+            'action': {'save_hash': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'nvgre'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_toeplitz_basic_pkt['nvgre'][0],\n+            ],\n+            'action': {'check_no_hash': ''},\n+        },\n+    ],\n+}\n+\n+mac_ipv6_all = {\n+    'sub_casename': 'mac_ipv6_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],\n+            'action': {'save_hash': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],\n+            'action': {'save_hash': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],\n+            'action': {'save_hash': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'save_hash': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'],\n+            'action': {'save_hash': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'nvgre'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_toeplitz_basic_pkt['nvgre'][0]\n+            ],\n+            'action': {'check_no_hash': ''},\n+        },\n+    ],\n+}\n+\n+#mac_ipv6_udp\n+mac_ipv6_udp_l2_src = {\n+    'sub_casename': 'mac_ipv6_udp_l2_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/UDP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_l2_dst = {\n+    'sub_casename': 'mac_ipv6_udp_l2_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/UDP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_l2src_l2dst = {\n+    'sub_casename': 'mac_ipv6_udp_l2src_l2dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/UDP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_l3_src = {\n+    'sub_casename': 'mac_ipv6_udp_l3_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_l3_dst = {\n+    'sub_casename': 'mac_ipv6_udp_l3_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_l3src_l4src = {\n+    'sub_casename': 'mac_ipv6_udp_l3src_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_l3src_l4dst = {\n+    'sub_casename': 'mac_ipv6_udp_l3src_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_l3dst_l4src = {\n+    'sub_casename': 'mac_ipv6_udp_l3dst_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_l3dst_l4dst = {\n+    'sub_casename': 'mac_ipv6_udp_l3dst_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_l4_src = {\n+    'sub_casename': 'mac_ipv6_udp_l4_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_l4_dst = {\n+    'sub_casename': 'mac_ipv6_udp_l3_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / 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_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_all = {\n+    'sub_casename': 'mac_ipv6_udp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],\n+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+#mac_ipv6_tcp\n+mac_ipv6_tcp_l2_src = {\n+    'sub_casename': 'mac_ipv6_tcp_l2_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/TCP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_tcp_l2_dst = {\n+    'sub_casename': 'mac_ipv6_tcp_l2_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/TCP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_tcp_l2src_l2dst = {\n+    'sub_casename': 'mac_ipv6_tcp_l2src_l2dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types eth end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/TCP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_tcp_l3_src = {\n+    'sub_casename': 'mac_ipv6_tcp_l3_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_tcp_l3_dst = {\n+    'sub_casename': 'mac_ipv6_tcp_l3_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n \n+mac_ipv6_tcp_l3src_l4src = {\n+    'sub_casename': 'mac_ipv6_tcp_l3src_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_tcp_l3src_l4dst = {\n+    'sub_casename': 'mac_ipv6_tcp_l3src_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp l3-src-only l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_tcp_l3dst_l4src = {\n+    'sub_casename': 'mac_ipv6_tcp_l3dst_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_tcp_l3dst_l4dst = {\n+    'sub_casename': 'mac_ipv6_tcp_l3dst_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_tcp_l4_src = {\n+    'sub_casename': 'mac_ipv6_tcp_l4_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_tcp_l4_dst = {\n+    'sub_casename': 'mac_ipv6_tcp_l3_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_tcp_all = {\n+    'sub_casename': 'mac_ipv6_tcp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],\n+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+#mac_ipv6_sctp\n+mac_ipv6_sctp_l2_src = {\n+    'sub_casename': 'mac_ipv6_sctp_l2_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types eth l2-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/SCTP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_l2_dst = {\n+    'sub_casename': 'mac_ipv6_sctp_l2_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/SCTP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_l2src_l2dst = {\n+    'sub_casename': 'mac_ipv6_sctp_l2src_l2dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types eth end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/SCTP(sport=25,dport=99)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_l3_src = {\n+    'sub_casename': 'mac_ipv6_sctp_l3_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_l3_dst = {\n+    'sub_casename': 'mac_ipv6_sctp_l3_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_l3src_l4src = {\n+    'sub_casename': 'mac_ipv6_sctp_l3src_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp l3-src-only l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_l3src_l4dst = {\n+    'sub_casename': 'mac_ipv6_sctp_l3src_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp l3-src-only l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_l3dst_l4src = {\n+    'sub_casename': 'mac_ipv6_sctp_l3dst_l4src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp l3-dst-only l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_l3dst_l4dst = {\n+    'sub_casename': 'mac_ipv6_sctp_l3dst_l4dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp l3-dst-only l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_l4_src = {\n+    'sub_casename': 'mac_ipv6_sctp_l4_src',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp l4-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_l4_dst = {\n+    'sub_casename': 'mac_ipv6_sctp_l3_dst',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp l4-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_all = {\n+    'sub_casename': 'mac_ipv6_sctp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:53\", dst=\"68:05:CA:BB:27:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=32,dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=33)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': [\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],\n+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],\n+            ],\n+            'action': 'check_no_hash',\n+        },\n+    ],\n+}\n+# toeplitz related data end\n+\n+mac_ipv4_1 = [mac_ipv4_l2_src, mac_ipv4_l2_dst, mac_ipv4_l2src_l2dst]\n+mac_ipv4_2 = [mac_ipv4_l3_src, mac_ipv4_l3_dst, mac_ipv4_all]\n+\n+mac_ipv4_udp = [mac_ipv4_udp_l2_src, mac_ipv4_udp_l2_dst, mac_ipv4_udp_l2src_l2dst,\n+                mac_ipv4_udp_l3_src, mac_ipv4_udp_l3_dst, mac_ipv4_udp_l3src_l4src,\n+                mac_ipv4_udp_l3src_l4dst, mac_ipv4_udp_l3dst_l4src, mac_ipv4_udp_l3dst_l4dst,\n+                mac_ipv4_udp_l4_src, mac_ipv4_udp_l4_dst, mac_ipv4_udp_all]\n+\n+mac_ipv4_tcp = [mac_ipv4_tcp_l2_src, mac_ipv4_tcp_l2_dst, mac_ipv4_tcp_l2src_l2dst,\n+                mac_ipv4_tcp_l3_src, mac_ipv4_tcp_l3_dst, mac_ipv4_tcp_l3src_l4src,\n+                mac_ipv4_tcp_l3src_l4dst, mac_ipv4_tcp_l3dst_l4src, mac_ipv4_tcp_l3dst_l4dst,\n+                mac_ipv4_tcp_l4_src, mac_ipv4_tcp_l4_dst, mac_ipv4_tcp_all]\n+\n+mac_ipv4_sctp = [mac_ipv4_sctp_l2_src, mac_ipv4_sctp_l2_dst, mac_ipv4_sctp_l2src_l2dst,\n+                mac_ipv4_sctp_l3_src, mac_ipv4_sctp_l3_dst, mac_ipv4_sctp_l3src_l4src,\n+                mac_ipv4_sctp_l3src_l4dst, mac_ipv4_sctp_l3dst_l4src, mac_ipv4_sctp_l3dst_l4dst,\n+                mac_ipv4_sctp_l4_src, mac_ipv4_sctp_l4_dst, mac_ipv4_sctp_all]\n+\n+mac_ipv6 = [mac_ipv6_l2_src, mac_ipv6_l2_dst, mac_ipv6_l2src_l2dst, mac_ipv6_l3_src, mac_ipv6_l3_dst, mac_ipv6_all]\n+\n+mac_ipv6_udp = [mac_ipv6_udp_l2_src, mac_ipv6_udp_l2_dst, mac_ipv6_udp_l2src_l2dst,\n+                mac_ipv6_udp_l3_src, mac_ipv6_udp_l3_dst, mac_ipv6_udp_l3src_l4src,\n+                mac_ipv6_udp_l3src_l4dst, mac_ipv6_udp_l3dst_l4src, mac_ipv6_udp_l3dst_l4dst,\n+                mac_ipv6_udp_l4_src, mac_ipv6_udp_l4_dst, mac_ipv6_udp_all]\n+\n+mac_ipv6_tcp = [mac_ipv6_tcp_l2_src, mac_ipv6_tcp_l2_dst, mac_ipv6_tcp_l2src_l2dst,\n+                mac_ipv6_tcp_l3_src, mac_ipv6_tcp_l3_dst, mac_ipv6_tcp_l3src_l4src,\n+                mac_ipv6_tcp_l3src_l4dst, mac_ipv6_tcp_l3dst_l4src, mac_ipv6_tcp_l3dst_l4dst,\n+                mac_ipv6_tcp_l4_src, mac_ipv6_tcp_l4_dst, mac_ipv6_tcp_all]\n+\n+mac_ipv6_sctp = [mac_ipv6_sctp_l2_src, mac_ipv6_sctp_l2_dst, mac_ipv6_sctp_l2src_l2dst,\n+                mac_ipv6_sctp_l3_src, mac_ipv6_sctp_l3_dst, mac_ipv6_sctp_l3src_l4src,\n+                mac_ipv6_sctp_l3src_l4dst, mac_ipv6_sctp_l3dst_l4src, mac_ipv6_sctp_l3dst_l4dst,\n+                mac_ipv6_sctp_l4_src, mac_ipv6_sctp_l4_dst, mac_ipv6_sctp_all]\n+\n+# symmetric related data start\n+mac_ipv4_symmetric = {\n+    'sub_casename': 'mac_ipv4_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',\n+    'pre-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-nonfrag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-nonfrag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-frag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\",frag=6)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-frag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-icmp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-icmp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-vlan-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-vlan-pre'},\n+        },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\",frag=6)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+           'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+           'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+           'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+           'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        {\n+           'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+           'action': {'save_hash': 'ipv4-udp-vlan'},\n+        },\n+        {\n+           'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+           'action': {'check_hash_same': 'ipv4-udp-vlan'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2928\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+            'action': {'save_or_no_hash': 'ipv4-nonfrag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-nonfrag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)',\n+            'action': {'save_or_no_hash': 'ipv4-frag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\",frag=6)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-frag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)',\n+            'action': {'save_or_no_hash': 'ipv4-icmp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-icmp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_or_no_hash': 'ipv4-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_or_no_hash': 'ipv4-udp-vlan-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/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': 'ipv4-udp-vlan-post'},\n+        },\n+    ],\n+}\n+\n+mac_ipv4_udp_symmetric = {\n+    'sub_casename': 'mac_ipv4_udp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end',\n+    'pre-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'nvgre-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre-pre'},\n+        },\n+    ],\n+    'test': [\n+\t\t{\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'nvgre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': 'ipv4-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': 'ipv4-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'nvgre-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/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': 'nvgre-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/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': 'nvgre-post'},\n+        },\n+    ],\n+}\n+\n+mac_ipv4_tcp_symmetric = {\n+    'sub_casename': 'mac_ipv4_tcp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_len 0 queues end / end',\n+    'pre-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},\n+        },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},\n+        },\n+    ],\n+}\n+\n+mac_ipv4_sctp_symmetric = {\n+    'sub_casename': 'mac_ipv4_sctp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss func symmetric_toeplitz types ipv4-sctp end key_len 0 queues end / end',\n+    'pre-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},\n+        },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=23,dport=22)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},\n+        },\n+    ],\n+}\n+\n+mac_ipv6_symmetric = {\n+    'sub_casename': 'mac_ipv6_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end',\n+    'pre-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv6-nonfrag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-nonfrag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv6-frag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-frag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv6-icmp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-icmp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': 'ipv6-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv6-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv6-pre'},\n+        },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'save_or_no_hash': 'ipv6-nonfrag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv6-nonfrag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'save_or_no_hash': 'ipv6-frag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv6-frag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'save_or_no_hash': 'ipv6-icmp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv6-icmp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': 'ipv6-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv6-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'save_or_no_hash': 'ipv4-udp-vxlan-eth-ipv6-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv6-post'},\n+        },\n+    ],\n+}\n+\n+mac_ipv6_udp_symmetric = {\n+    'sub_casename': 'mac_ipv6_udp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp end key_len 0 queues end / end',\n+    'pre-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': 'ipv6-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/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': 'nvgre-eth-ipv6-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre-eth-ipv6-udp-pre'},\n+        },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/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': 'nvgre-eth-ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'nvgre-eth-ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': {'save_hash': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/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': {'save_hash': 'nvgre-eth-ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre-eth-ipv6-tcp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': 'ipv6-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv6-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/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': 'nvgre-eth-ipv6-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'nvgre-eth-ipv6-udp-post'},\n+        },\n+    ],\n+}\n+\n+mac_ipv6_tcp_symmetric = {\n+    'sub_casename': 'mac_ipv6_tcp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end',\n+    'pre-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': {'save_hash': 'ipv6-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/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': {'save_hash': 'nvgre-eth-ipv6-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre-eth-ipv6-tcp-pre'},\n+        },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': {'save_hash': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/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': {'save_hash': 'nvgre-eth-ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'nvgre-eth-ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/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': 'nvgre-eth-ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre-eth-ipv6-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': {'save_hash': 'ipv6-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv6-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/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': {'save_hash': 'nvgre-eth-ipv6-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'nvgre-eth-ipv6-tcp-post'},\n+        },\n+    ],\n+}\n+\n+mac_ipv6_sctp_symmetric = {\n+    'sub_casename': 'mac_ipv6_sctp_all',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss func symmetric_toeplitz types ipv6-sctp end key_len 0 queues end / end',\n+    'pre-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv6-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'nvgre-eth-ipv6-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'nvgre-eth-ipv6-sctp-pre'},\n+        },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'nvgre-eth-ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_same': 'nvgre-eth-ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'ipv6-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'ipv6-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'save_hash': 'nvgre-eth-ipv6-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(src=\"00:11:22:33:44:55\", dst=\"68:05:CA:BB:26:E0\")/IP()/NVGRE()/Ether()/IPv6(dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/SCTP(sport=22,dport=23)/(\"X\"*480)',\n+            'action': {'check_no_hash_or_different': 'nvgre-eth-ipv6-sctp-post'},\n+        },\n+    ],\n+}\n+# symmetric related data end\n+\n+mac_l3_address_switched = {\n+    'sub_casename': 'mac_l3_address_switched',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern end actions rss func simple_xor key_len 0 queues end / end',\n+    'pre-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/(\"X\" * 80)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\" * 80)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/UDP(sport=22, dport=23)/(\"X\" * 80)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22, dport=23)/(\"X\" * 80)',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/(\"X\" * 80)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\" * 80)',\n+            'action': 'check_hash_same',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/UDP(sport=22, dport=23)/(\"X\" * 80)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22, dport=23)/(\"X\" * 80)',\n+            'action': 'check_hash_same',\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22, dport=23)/(\"X\"*480)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/(\"X\" * 80)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\" * 80)',\n+            'action': 'check_hash_different',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=\"ABAB:910B:6666:3457:8295:3333:1800:2929\")/UDP(sport=22, dport=23)/(\"X\" * 80)',\n+            'action': 'save_hash',\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:ca:a3:28:94\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/UDP(sport=22, dport=23)/(\"X\" * 80)',\n+            'action': 'check_hash_different',\n+        },\n+    ],\n+}\n \n-test_results = OrderedDict()\n+mac_global_simple_xor = [mac_l3_address_switched]\n+\n+ipv6_32bit_prefix_l3_src_only = {\n+    'sub_casename': 'ipv6_32bit_prefix_l3_src_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre32 l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'save_hash': 'ipv6-32bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe83:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-32bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:b6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-32bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-32bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_no_hash_or_different': 'ipv6-32bit'},\n+        },\n+    ],\n+}\n+\n+ipv6_32bit_prefix_l3_dst_only = {\n+    'sub_casename': 'ipv6_32bit_prefix_l3_dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre32 l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'save_hash': 'ipv6-32bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe83:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-32bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:b6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-32bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-32bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81::a6bf:1ff:fe1c:806\", dst=\"fe82::a6bf:1ff:fe1c:806\")/Raw(\"x\"*64)',\n+            'action': {'check_no_hash_or_different': 'ipv6-32bit'},\n+        },\n+    ],\n+}\n+\n+ipv6_32bit_prefix_l3_src_dst_only = {\n+    'sub_casename': 'ipv6_32bit_prefix_l3_src_dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre32 l3-src-only l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'save_hash': 'ipv6-32bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe83:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-32bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe83:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-32bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:b6bf:1ff:fe1c::806\", dst=\"fe82:1:b6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-32bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-32bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81::a6bf:1ff:fe1c:806\", dst=\"fe82::a6bf:1ff:fe1c:806\")/Raw(\"x\"*64)',\n+            'action': {'check_no_hash_or_different': 'ipv6-32bit'},\n+        },\n+    ],\n+}\n+\n+ipv6_32bit_prefix = [ipv6_32bit_prefix_l3_src_only, ipv6_32bit_prefix_l3_dst_only, ipv6_32bit_prefix_l3_src_dst_only]\n+\n+ipv6_48bit_prefix_l3_src_only = {\n+    'sub_casename': 'ipv6_48bit_prefix_l3_src_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre48 l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'save_hash': 'ipv6-48bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:b6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-48bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:2ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-48bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-48bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_no_hash_or_different': 'ipv6-48bit'},\n+        },\n+    ],\n+}\n+\n+ipv6_48bit_prefix_l3_dst_only = {\n+    'sub_casename': 'ipv6_48bit_prefix_l3_dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre48 l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'save_hash': 'ipv6-48bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe83:1:b6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-48bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:2ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-48bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-48bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_no_hash_or_different': 'ipv6-48bit'},\n+        },\n+    ],\n+}\n+\n+ipv6_48bit_prefix_l3_src_dst_only = {\n+    'sub_casename': 'ipv6_48bit_prefix_l3_src_dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre48 l3-src-only l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'save_hash': 'ipv6-48bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:b6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-48bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:b6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-48bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:2ff:fe1c::806\", dst=\"fe82:1:a6bf:2ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-48bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-48bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81::a6bf:1ff:fe1c:806\", dst=\"fe82::a6bf:1ff:fe1c:806\")/Raw(\"x\"*64)',\n+            'action': {'check_no_hash_or_different': 'ipv6-48bit'},\n+        },\n+    ],\n+}\n+\n+ipv6_48bit_prefix = [ipv6_48bit_prefix_l3_src_only, ipv6_48bit_prefix_l3_dst_only, ipv6_48bit_prefix_l3_src_dst_only]\n+\n+ipv6_64bit_prefix_l3_src_only = {\n+    'sub_casename': 'ipv6_64bit_prefix_l3_src_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre64 l3-src-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'save_hash': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe83:1:a6bf:2ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:ee1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_no_hash_or_different': 'ipv6-64bit'},\n+        },\n+    ],\n+}\n+\n+ipv6_64bit_prefix_l3_dst_only = {\n+    'sub_casename': 'ipv6_64bit_prefix_l3_dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre64 l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'save_hash': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe83:1:a6bf:2ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:ee1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_no_hash_or_different': 'ipv6-64bit'},\n+        },\n+    ],\n+}\n+\n+ipv6_64bit_prefix_l3_src_dst_only = {\n+    'sub_casename': 'ipv6_64bit_prefix_l3_src_dst_only',\n+    'port_id': 0,\n+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre64 l3-src-only l3-dst-only end key_len 0 queues end / end',\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'save_hash': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:2ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:2ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_different': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:ee1c::806\", dst=\"fe82:1:a6bf:1ff:ee1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)',\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"68:05:CA:BB:26:E0\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)',\n+            'action': {'check_no_hash_or_different': 'ipv6-64bit'},\n+        },\n+    ],\n+}\n+\n+ipv6_64bit_prefix = [ipv6_64bit_prefix_l3_src_only, ipv6_64bit_prefix_l3_dst_only, ipv6_64bit_prefix_l3_src_dst_only]\n \n class AdvancedRSSTest(TestCase):\n \n     def set_up_all(self):\n         \"\"\"\n         Run at the start of each test suite.\n-        Generic filter Prerequistites\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-        # Verify that enough ports are available\n-        self.verify(len(self.dut_ports) >= 1, \"Insufficient ports\")\n-        #self.cores = \"1S/8C/1T\"\n-        self.pmdout = PmdOutput(self.dut)\n-\n-        localPort = self.tester.get_local_port(self.dut_ports[0])\n-        self.__tx_iface = self.tester.get_interface(localPort)\n-        self.pf_interface = self.dut.ports_info[self.dut_ports[0]]['intf']\n-        self.pf_mac = self.dut.get_mac_address(0)\n-        self.pf_pci = self.dut.ports_info[self.dut_ports[0]]['pci']\n-        self.verify(self.nic in [\"columbiaville_25g\",\"columbiaville_100g\"], \"%s nic not support ethertype filter\" % self.nic)\n-\n+        self.verify(len(self.dut_ports) >= 2, \"Insufficient ports for testing\")\n+        # Verify that enough threads are available\n+        cores = self.dut.get_core_list(\"1S/4C/1T\")\n+        self.verify(cores is not None, \"Insufficient cores for speed testing\")\n+        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])\n+        self.tester_port0 = self.tester.get_local_port(self.dut_ports[0])\n+        self.tester_port1 = self.tester.get_local_port(self.dut_ports[1])\n+        self.tester_iface0 = self.tester.get_interface(self.tester_port0)\n+        self.tester_iface1 = self.tester.get_interface(self.tester_port1)\n+        self.pci0 = self.dut.ports_info[self.dut_ports[0]]['pci']\n+        self.pci1 = self.dut.ports_info[self.dut_ports[1]]['pci']\n+        self.pass_flag = 'passed'\n+        self.fail_flag = 'failed'\n \n+        self.pkt = Packet()\n+        self.pmd_output = PmdOutput(self.dut)\n+        self.package_version = self.launch_testpmd()\n+        self.symmetric = False\n+        self.rxq = 64\n+        self.rssprocess = RssProcessing(self, self.pmd_output, [self.tester_iface0, self.tester_iface1], self.rxq)\n+        self.logger.info('rssprocess.tester_ifaces: {}'.format(self.rssprocess.tester_ifaces))\n+        self.logger.info('rssprocess.test_case: {}'.format(self.rssprocess.test_case))\n \n     def set_up(self):\n         \"\"\"\n         Run before each test case.\n         \"\"\"\n-        self.dut.kill_all()\n+        if self.symmetric:\n+            self.pmd_output.execute_cmd(\"port config all rss all\")\n+        self.pmd_output.execute_cmd(\"start\")\n \n-    def tear_down(self):\n-        \"\"\"\n-        Run after each test case.\n-        \"\"\"\n-        self.dut.kill_all()\n+    def launch_testpmd(self, symmetric=False, package='comms'):\n+        if symmetric:\n+            param = \"--rxq=64 --txq=64\"\n+        else:\n+            param = \"--rxq=64 --txq=64 --disable-rss --rxd=384 --txd=384\"\n+        out = self.pmd_output.start_testpmd(cores=\"1S/4C/1T\", param=param,\n+                                            eal_param=f\"-w {self.pci0}\", socket=self.ports_socket)\n+        self.symmetric = symmetric\n+        if symmetric is True:\n+            '''\n+            symmetric may be False/True/2(any other not negative value)\n+            False: disable rss\n+            True: enable rss and execute port config all rss\n+            2: enable rss and do not execute port config all rss\n+            '''\n+            # Need config rss in setup\n+            self.pmd_output.execute_cmd(\"port config all rss all\")\n+        self.pmd_output.execute_cmd(\"set fwd rxonly\")\n+        self.pmd_output.execute_cmd(\"set verbose 1\")\n+        res = self.pmd_output.wait_link_status_up('all', timeout=15)\n+        self.verify(res is True, 'there have port link is down')\n \n-    \n-    def tear_down_all(self):\n-        \"\"\"\n-        Run after each test suite.\n-        \"\"\"\n-        self.dut.kill_all()\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(self):\n+        self.switch_testpmd(symmetric=False)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_1)\n+        self.pmd_output.execute_cmd(\"rx_vxlan_port add 4789 0\")\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_2)\n \n-    def create_testpmd_command(self):\n-        \"\"\"\n-        Create testpmd command for non-pipeline mode\n-        \"\"\"\n-        #Prepare testpmd EAL and parameters \n-        all_eal_param = self.dut.create_eal_parameters(ports=[self.pf_pci])\n-        print(all_eal_param)   #print eal parameters\n-        command = self.dut.apps_name['test-pmd'] + all_eal_param + \" -- -i --rxq=64 --txq=64\"\n-        return command\n-\n-    def _rte_flow_validate_pattern(self, test_vectors, command, is_vxlan):\n-\n-        out = self.dut.send_expect(command, \"testpmd> \", 120)\n-        self.logger.debug(out)  #print the log\n-        self.dut.send_expect(\"port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd\", \"testpmd> \", 15)\n-        if is_vxlan:\n-            self.dut.send_expect(\"rx_vxlan_port add 4789 0\", \"testpmd> \", 15)\n-        self.dut.send_expect(\"set fwd rxonly\", \"testpmd> \", 15)\n-        self.dut.send_expect(\"set verbose 1\", \"testpmd> \", 15)\n-\n-        self.count = 1\n-        self.mac_count = 100\n-        result_dic = dict()\n-        result_flag = 0\n-        for tv in test_vectors:\n-            out = self.dut.send_expect(tv[\"rte_flow_pattern\"], \"testpmd> \", 15)  #create a rule\n-            print(out)\n-            self.dut.send_expect(\"start\", \"testpmd> \", 15)\n-            time.sleep(2)\n-            tv[\"check_func_param\"][\"expect_port\"] = self.dut_ports[0]\n-            print(\"expect_port is\", self.dut_ports[0])\n-\n-            #send a packet\n-            if isinstance(tv[\"scapy_str\"], list):\n-                pkt = packet.Packet()\n-                pkt.update_pkt(tv[\"scapy_str\"])\n-                pkt.send_pkt(self.tester, tx_port=self.__tx_iface, count=self.count)\n-            else:\n-                for index in range(10):\n-                    pkt = Packet(pkt_str=tv[\"scapy_str\"])\n-                    pkt.send_pkt(self.tester, tx_port=self.__tx_iface, count=self.count)\n-                    print(\"packet:\")\n-                    print(tv[\"scapy_str\"])\n-\n-            if \"symmetric\" or \"xor\" in tv[\"name\"]:\n-                out = self.dut.get_session_output(timeout=3)\n-                self.dut.send_expect(\"stop\", \"testpmd> \", 60)\n-            else:\n-                out = self.dut.send_expect(\"stop\", \"testpmd> \", 60)\n-                result, ret_log = rfc.check_rx_tx_packets_match(out, self.mac_count)\n-                self.verify(result is True, ret_log)\n-            ret_result, log_msg = tv[\"check_func\"](out)\n-            print(\"%s result is: %s ,%s \" % (tv[\"name\"], ret_result, log_msg))\n-\n-            result_dic[tv[\"name\"]] = ret_result\n-\n-        print(result_dic)\n-\n-        if False in result_dic.values():\n-            result_flag = 1\n-\n-        self.dut.send_expect(\"flow flush %d\" % self.dut_ports[0], \"testpmd> \")\n-        self.dut.send_expect(\"quit\", \"#\")\n-        self.verify(result_flag == 0, \"Some case failed\")\n-\n-    def test_advance_rss_ipv4(self):\n-        command = self.create_testpmd_command()\n-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4, command, is_vxlan = True)\n-\n-    def test_advance_rss_ipv4_port(self):  \n-        command = self.create_testpmd_command()\n-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_port, command, is_vxlan = True)\n-\n-    def test_advance_rss_ipv4_nvgre(self):  \n-        command = self.create_testpmd_command()\n-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_nvgre, command, is_vxlan = True)\n-\n-    def test_advance_rss_ipv4_vxlan(self):  \n-        command = self.create_testpmd_command()\n-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_vxlan, command, is_vxlan = True)\n-\n-    def test_advance_rss_ipv6(self):  \n-        command = self.create_testpmd_command()\n-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv6, command, is_vxlan = True)\n-\n-    def test_advance_rss_ipv4_pppoe(self):  \n-        command = self.create_testpmd_command()\n-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_pppoe, command, is_vxlan = True)\n-\n-    def test_advance_rss_ipv4_gtp(self):  \n-        command = self.create_testpmd_command()\n-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_gtp, command, is_vxlan = True)\n-\n-    def test_rss_ipv4_symetric_toeplitz(self):  \n-         command = self.create_testpmd_command()\n-         self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_symmetric_toeplitz, command, is_vxlan = True)\n-         \n-    def test_rss_ipv6_symetric_toeplitz(self):  \n-         command = self.create_testpmd_command()\n-         self._rte_flow_validate_pattern(tvs_mac_rss_ipv6_symmetric_toeplitz, command, is_vxlan = True)\n-    \n-    def test_rss_ipv4_symetric_toeplitz_nvgre(self):  \n-         command = self.create_testpmd_command()\n-         self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_symmetric_toeplitz_nvgre, command, is_vxlan = True)\n-    \n-    def test_rss_ipv6_symetric_toeplitz_nvgre(self):  \n-         command = self.create_testpmd_command()\n-         self._rte_flow_validate_pattern(tvs_mac_rss_ipv6_symmetric_toeplitz_nvgre, command, is_vxlan = True)\n-         \n-    def test_rss_symetric_toeplitz_vxlan(self):  \n-         command = self.create_testpmd_command()\n-         self._rte_flow_validate_pattern(tvs_mac_rss_symmetric_toeplitz_vxlan, command, is_vxlan = True)\n-    \n-    def test_rss_simple_xor(self):  \n-         command = self.create_testpmd_command()\n-         self._rte_flow_validate_pattern(tvs_mac_rss_simple_xor, command, is_vxlan = True)   \n+    def test_mac_ipv4_udp(self):\n+        self.switch_testpmd(symmetric=False)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_udp)\n+\n+    def test_mac_ipv4_tcp(self):\n+        self.switch_testpmd(symmetric=False)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_tcp)\n+\n+    def test_mac_ipv4_sctp(self):\n+        self.switch_testpmd(symmetric=False)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_sctp)\n+\n+    def test_mac_ipv6(self):\n+        self.switch_testpmd(symmetric=False)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6)\n+\n+    def test_mac_ipv6_udp(self):\n+        self.switch_testpmd(symmetric=False)\n+        self.pmd_output.execute_cmd(\"rx_vxlan_port add 4789 0\")\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_udp)\n+\n+    def test_mac_ipv6_tcp(self):\n+        self.switch_testpmd(symmetric=False)\n+        self.pmd_output.execute_cmd(\"rx_vxlan_port add 4789 0\")\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_tcp)\n+\n+    def test_mac_ipv6_sctp(self):\n+        self.switch_testpmd(symmetric=False)\n+        self.pmd_output.execute_cmd(\"rx_vxlan_port add 4789 0\")\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_sctp)\n+\n+    def test_symmetric_mac_ipv4(self):\n+        self.switch_testpmd(symmetric=2)\n+        self.pmd_output.execute_cmd(\"rx_vxlan_port add 4789 0\")\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_symmetric)\n+\n+    def test_symmetric_mac_ipv4_udp(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_udp_symmetric)\n+\n+    def test_symmetric_mac_ipv4_tcp(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.pmd_output.execute_cmd(\"rx_vxlan_port add 4789 0\")\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_tcp_symmetric)\n+\n+    def test_symmetric_mac_ipv4_sctp(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_sctp_symmetric)\n+\n+    def test_symmetric_mac_ipv6(self):\n+        self.switch_testpmd(symmetric=2)\n+        self.pmd_output.execute_cmd(\"rx_vxlan_port add 4789 0\")\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_symmetric)\n+\n+    def test_symmetric_mac_ipv6_udp(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_udp_symmetric)\n+\n+    def test_symmetric_mac_ipv6_tcp(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_tcp_symmetric)\n \n+    def test_symmetric_mac_ipv6_sctp(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_sctp_symmetric)\n+\n+    def test_32bit_ipv6_prefix(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_32bit_prefix)\n+\n+    def test_48bit_ipv6_prefix(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_48bit_prefix)\n+\n+    def test_64bit_ipv6_prefix(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_64bit_prefix)\n+\n+    def test_global_simple_xor(self):\n+        self.switch_testpmd(symmetric=True)\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_global_simple_xor)\n+\n+    def test_negative_case(self):\n+        self.switch_testpmd(symmetric=False)\n+        rules = [\n+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l3-src-only end key_len 0 queues end / end',\n+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l3-src-only end key_len 0 queues end / end',\n+            'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end',\n+            'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end',\n+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv6 end key_len 0 queues end / end',\n+            'flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 l3-src-only end key_len 0 queues end / end',\n+            'flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types eth end key_len 0 queues end / end',\n+        ]\n+        for i in rules:\n+            out = self.pmd_output.execute_cmd(i, timeout=1)\n+            self.verify('ice_flow_create(): Failed to create flow' in out, \"rule %s create successfully\" % i)\n+\n+        rules_val = [\n+            'flow validate 0 ingress pattern eth / ipv4 / end actions rss types eth l3-src-only end key_len 0 queues end / end',\n+            'flow validate 0 ingress pattern eth / ipv4 / end actions rss types ipv4-udp end key_len 0 queues end / end',\n+            'flow validate 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end',\n+            'flow validate 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end',\n+            'flow validate 0 ingress pattern eth / ipv4 / end actions rss types ipv6 end key_len 0 queues end / end',\n+            'flow validate 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 l3-src-only end key_len 0 queues end / end',\n+            'flow validate 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types eth end key_len 0 queues end / end',\n+        ]\n+        for i in rules_val:\n+            out = self.pmd_output.execute_cmd(i, timeout=1)\n+            self.verify('Invalid argument' in out, \"rule %s validate successfully\" % i)\n+\n+    def test_multirules(self):\n+        self.switch_testpmd(symmetric=True)\n+        #Subcase 1: two rules with same pattern but different hash input set, not hit default profile\n+        self.rssprocess.error_msgs = []\n+        self.logger.info('===================Test sub case: multirules subcase 1 ================')\n+        rule_id_0 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end', check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)\n+        tests = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(dport=45)/Raw(\"x\"*480)',\n+                        'action': {'save_hash': 'ipv4-udp'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/UDP(dport=45)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_different': 'ipv4-udp'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        rule_id_1 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end', check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)\n+        tests = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(dport=45)/Raw(\"x\"*480)',\n+                        'action': {'save_hash': 'ipv4-udp'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/UDP(dport=45)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_same': 'ipv4-udp'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.7\")/UDP(dport=45)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_different': 'ipv4-udp'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)\n+        self.rssprocess.check_rule(port_id=0)\n+        tests = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(dport=45)/Raw(\"x\"*480)',\n+                        'action': {'save_hash': 'ipv4-udp'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.9\")/UDP(dport=45)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_different': 'ipv4-udp'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.9\")/UDP(dport=45)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_different': 'ipv4-udp'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)\n+        self.rssprocess.handle_tests(tests, 0)\n+\n+        # Subcase 2: two rules with same pattern but different hash input set, hit default profile\n+        self.logger.info('===================Test sub case: multirules subcase 2 ================')\n+        rule_id_0 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end', check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)\n+        tests = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/Raw(\"x\"*480)',\n+                        'action': {'save_hash': 'ipv4-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/Raw(\"x\"*480)',\n+                        'action': {'check_hash_different': 'ipv4-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.8\")/Raw(\"x\"*480)',\n+                        'action': {'check_hash_same': 'ipv4-pay'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        rule_id_1 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end', check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)\n+        tests = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/Raw(\"x\"*480)',\n+                        'action': {'save_hash': 'ipv4-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/Raw(\"x\"*480)',\n+                        'action': {'check_hash_same': 'ipv4-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.7\")/Raw(\"x\"*480)',\n+                        'action': {'check_hash_different': 'ipv4-pay'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)\n+        self.rssprocess.check_rule(port_id=0)\n+        tests = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/Raw(\"x\"*480)',\n+                        'action': {'check_no_hash': 'ipv4-pay'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)\n+\n+        # Subcase 3: two rules, scope smaller created first, and the larger one created later\n+        self.logger.info('===================Test sub case: multirules subcase 3 ================')\n+        rule_id_0 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end', check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)\n+        tests_3 = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)',\n+                        'action': {'save_hash': 'ipv4-udp-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=25, dport=45)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_different': 'ipv4-udp-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.8\")/UDP(sport=23, dport=44)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_same': 'ipv4-udp-pay'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests_3, 0)\n+        rule_id_1 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end', check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)\n+        tests = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)',\n+                        'action': {'save_hash': 'ipv4-udp-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_different': 'ipv4-udp-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.8\")/UDP(sport=25, dport=99)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_same': 'ipv4-udp-pay'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)\n+        self.rssprocess.handle_tests(tests_3, 0)\n+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)\n+        tests = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)',\n+                        'action': {'check_no_hash': 'ipv4-udp-pay'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests, 0)\n+\n+        # Subcase 4: two rules, scope larger created first, and the smaller one created later\n+        self.logger.info('===================Test sub case: multirules subcase 4 ================')\n+        rule_id_0 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end', check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)\n+        tests_4 = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)',\n+                        'action': {'save_hash': 'ipv4-udp-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_different': 'ipv4-udp-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.8\")/UDP(sport=25, dport=99)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_same': 'ipv4-udp-pay'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests_4, 0)\n+        rule_id_1 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end', check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)\n+        tests = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)',\n+                        'action': {'save_hash': 'ipv4-udp-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=25, dport=45)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_different': 'ipv4-udp-pay'},\n+                    },\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.8\")/UDP(sport=23, dport=44)/Raw(\"x\"*480)',\n+                        'action': {'check_hash_same': 'ipv4-udp-pay'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)\n+        self.rssprocess.handle_tests(tests_4, 0)\n+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)\n+        tests = [\n+                    {\n+                        'send_packet': 'Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)',\n+                        'action': {'check_no_hash': 'ipv4-udp-pay'},\n+                    },\n+                ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        self.verify(not self.rssprocess.error_msgs, 'some subcases failed')\n+\n+    def tear_down(self):\n+        # destroy all flow rule on port 0\n+        self.dut.send_command(\"flow flush 0\", timeout=1)\n+        self.dut.send_command(\"clear port stats all\", timeout=1)\n+        self.pmd_output.execute_cmd(\"stop\")\n+\n+    def tear_down_all(self):\n+        self.dut.kill_all()\n",
    "prefixes": [
        "V3",
        "2/8"
    ]
}