get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 83511,
    "url": "https://patches.dpdk.org/api/patches/83511/?format=api",
    "web_url": "https://patches.dpdk.org/project/dts/patch/20201103083656.16541-4-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": "<20201103083656.16541-4-haiyangx.zhao@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20201103083656.16541-4-haiyangx.zhao@intel.com",
    "date": "2020-11-03T08:36:51",
    "name": "[V4,3/8] tests/TestSuite_cvl_advanced_iavf_rss:update script",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "9dd0183eb2064cb1c1e51019ce3a58c4ec52aea8",
    "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/20201103083656.16541-4-haiyangx.zhao@intel.com/mbox/",
    "series": [
        {
            "id": 13608,
            "url": "https://patches.dpdk.org/api/series/13608/?format=api",
            "web_url": "https://patches.dpdk.org/project/dts/list/?series=13608",
            "date": "2020-11-03T08:36:48",
            "name": "tests: update or add rss related suites",
            "version": 4,
            "mbox": "https://patches.dpdk.org/series/13608/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/83511/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/83511/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 4DE58A0521;\n\tTue,  3 Nov 2020 09:38:51 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 240ADC83E;\n\tTue,  3 Nov 2020 09:38:43 +0100 (CET)",
            "from mga18.intel.com (mga18.intel.com [134.134.136.126])\n by dpdk.org (Postfix) with ESMTP id 284F2C828\n for <dts@dpdk.org>; Tue,  3 Nov 2020 09:38:33 +0100 (CET)",
            "from fmsmga008.fm.intel.com ([10.253.24.58])\n by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 03 Nov 2020 00:38:30 -0800",
            "from unknown (HELO localhost.localdomain) ([10.240.183.55])\n by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 03 Nov 2020 00:38:24 -0800"
        ],
        "IronPort-SDR": [
            "\n g86GPWBAhZiyvG6lWw13jXALHLxdBOKz9TuWJYxMaCCO9LV9Jq/ZWOUQGKrxHfj9ENxErC30rQ\n wDKnAyBYu6oQ==",
            "\n whPljIWlnFX2vVw18ZmdFLm0/WdeQKv1k9XcCQ+7nlDVw4g7ZJGsCbePvt0xY1vrdnOFEz/Cna\n rCm8e8mdEa7A=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9793\"; a=\"156798018\"",
            "E=Sophos;i=\"5.77,447,1596524400\"; d=\"scan'208\";a=\"156798018\"",
            "E=Sophos;i=\"5.77,447,1596524400\"; d=\"scan'208\";a=\"305734283\""
        ],
        "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": "Tue,  3 Nov 2020 16:36:51 +0800",
        "Message-Id": "<20201103083656.16541-4-haiyangx.zhao@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20201103083656.16541-1-haiyangx.zhao@intel.com>",
        "References": "<20201103083656.16541-1-haiyangx.zhao@intel.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dts] [PATCH V4 3/8] tests/TestSuite_cvl_advanced_iavf_rss:update\n\tscript",
        "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_iavf_rss script.\n\nSigned-off-by: Xie wei <weix.xie@intel.com>\n---\n tests/TestSuite_cvl_advanced_iavf_rss.py | 6305 ++++++++++++++++++----\n 1 file changed, 5279 insertions(+), 1026 deletions(-)",
    "diff": "diff --git a/tests/TestSuite_cvl_advanced_iavf_rss.py b/tests/TestSuite_cvl_advanced_iavf_rss.py\nindex 5c7da2b..7513a80 100644\n--- a/tests/TestSuite_cvl_advanced_iavf_rss.py\n+++ b/tests/TestSuite_cvl_advanced_iavf_rss.py\n@@ -29,781 +29,5078 @@\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 re\n-import time\n \n+import re\n+import random\n from packet import Packet\n from pmd_output import PmdOutput\n from test_case import TestCase\n-from config import UserConf\n-import rte_flow_common as rfc\n-\n-vf0_mac = \"00:01:23:45:67:89\"\n-vf1_mac = \"00:11:22:33:44:55\"\n+from rte_flow_common import RssProcessing\n+\n+vf0_mac = \"00:11:22:33:44:55\"\n+\n+# toeplitz related data start\n+mac_ipv4_toeplitz_basic_pkt = {\n+    'ipv4-nonfrag': [\n+       'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)' % vf0_mac,\n+    ],\n+    'ipv4-frag': [\n+        'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\", frag=6)/(\"X\"*480)' % vf0_mac,\n+    ],\n+    'ipv4-icmp': [\n+        'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+    ],\n+    'ipv4-tcp': [\n+        'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+    ],\n+    # 'ipv4-udp-vxlan': [\n+    #     'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    # ],\n+}\n+\n+mac_ipv4_udp_toeplitz_basic_pkt = {\n+    'ipv4-udp': [\n+       'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+    ],\n+    # 'nvgre': [\n+    #     'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    # ],\n+}\n+\n+mac_ipv4_tcp_toeplitz_basic_pkt = {\n+    'ipv4-tcp': [\n+       'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+    ],\n+    # 'nvgre': [\n+    #     'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    # ],\n+}\n+\n+mac_ipv4_sctp_toeplitz_basic_pkt = {\n+    'ipv4-sctp': [\n+       'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+    ],\n+    # 'nvgre': [\n+    #     'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    # ],\n+}\n+\n+mac_ipv6_toeplitz_basic_pkt = {\n+    'ipv6-nonfrag': [\n+       'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    ],\n+    'ipv6-frag': [\n+        'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    ],\n+    'ipv6-icmp': [\n+        'Ether(dst=\"%s\", src=\"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)'  % vf0_mac,\n+    ],\n+    'ipv6-udp': [\n+        'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    ],\n+    # 'nvgre': [\n+    #     'Ether(dst=\"%s\", src=\"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)'  % vf0_mac,\n+    # ],\n+}\n+\n+mac_ipv6_udp_toeplitz_basic_pkt = {\n+    'ipv6-udp': [\n+       'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    ],\n+    # 'ipv4_udp_vxlan_ipv6_udp': [\n+    #     'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    # ],\n+}\n+\n+mac_ipv6_tcp_toeplitz_basic_pkt = {\n+    'ipv6-tcp': [\n+       'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    ],\n+    # 'ipv4_tcp_vxlan_ipv6_tcp': [\n+    #     'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    # ],\n+}\n+\n+mac_ipv6_sctp_toeplitz_basic_pkt = {\n+    'ipv6-sctp': [\n+       'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    ],\n+    # 'ipv4_sctp_vxlan_ipv6_sctp': [\n+    #     'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+    # ],\n+}\n+\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': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\", frag=6)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\",frag=7)/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/TCP(sport=19,dport=99)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+    ],\n+}\n+\n+mac_ipv4_l2_dst = {\n+    'sub_casename': 'mac_ipv4_l2_dst',\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\",frag=7)/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/TCP(sport=19,dport=99)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+    ],\n+}\n+\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\",frag=7)/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/TCP(sport=23,dport=25)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+    ],\n+}\n+\n+mac_ipv4_l3_src = {\n+    'sub_casename': 'mac_ipv4_l3_src',\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\",frag=6)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\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': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        # },\n+    ],\n+}\n+\n+mac_ipv4_l3_dst = {\n+    'sub_casename': 'mac_ipv4_l3_dst',\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\",frag=6)/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        # },\n+    ],\n+}\n+\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\",frag=6)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)' % vf0_mac,\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\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': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP()/UDP()/VXLAN()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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))' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],\n+            'action': {'check_hash_different': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],\n+            'action': {'check_hash_different': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},\n+        # },\n+    ],\n+}\n \n-tv_iavf_mac_eth_src_only = {\n-    \"name\": \"iavf_mac_eth_src_only\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4  / end actions rss types l2-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(src=RandMAC())/IP()/(\"X\"*480)'],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/UDP(sport=25,dport=99)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+    ],\n }\n \n-tv_iavf_mac_eth_dst_only = {\n-    \"name\": \"iavf_mac_eth_dst_only\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4  / end actions rss types l2-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP()/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': ' Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/UDP(sport=25,dport=99)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+    ],\n }\n \n-tv_iavf_mac_ipv4_l3_src = {\n-    \"name\": \"iavf_mac_ipv4_l3_src\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(src=RandIP())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_l3_src_frag = {\n-    \"name\": \"iavf_mac_ipv4_l3_src_frag\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(src=RandIP(),frag=5)/SCTP(sport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP(src=RandIP(), dst=\"192.168.0.8\", frag=5)/SCTP(sport=RandShort())/(\"X\" * 80)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_l3_dst = {\n-    \"name\": \"iavf_mac_ipv4_l3_dst\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(dst=RandIP())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP(src=\"192.168.0.8\",dst=RandIP())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_l3_dst_frag = {\n-    \"name\": \"iavf_mac_ipv4_l3_dst_frag\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(dst=RandIP(), frag=5)/SCTP(sport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_l3_src_frag_icmp = {\n-    \"name\": \"iavf_mac_ipv4_l3_dst_frag_icmp\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(src=RandIP(), frag=5)/ICMP()/(\"X\" *480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_l3_dst_frag_icmp = {\n-    \"name\": \"iavf_mac_ipv4_l3_dst_frag_icmp\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(dst=RandIP(), frag=5)/ICMP()/(\"X\" *480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP(dst=RandIP(), src=\"192.168.0.5\",frag=5)/ICMP()/(\"X\" * 80)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_pay = {\n-    \"name\": \"iavf_mac_ipv4_pay\",\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=\"%s\")/IP(src=RandIP(),dst=RandIP())/(\"X\" *480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_pay_frag_icmp = {\n-    \"name\": \"iavf_mac_ipv4_pay_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=\"%s\")/IP(src=RandIP(),dst=RandIP())/ICMP()/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_l3_src_nvgre = {\n-    \"name\": \"iavf_mac_ipv4_l3_src_nvgre\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP()/NVGRE()/Ether()/IP(src=RandIP())/ICMP()/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_l3_dst_nvgre = {\n-    \"name\": \"iavf_mac_ipv4_l3_dst_nvgre\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP()/NVGRE()/Ether()/IP(dst=RandIP())/ICMP()/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_nvgre_udp_frag = {\n-    \"name\": \"iavf_mac_ipv4_nvgre_udp_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=\"%s\")/IP()/NVGRE()/Ether()/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_nvgre_sctp = {\n-    \"name\": \"iavf_mac_ipv4_nvgre_sctp\",\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=\"%s\")/IP()/NVGRE()/Ether()/IP(src=RandIP(),dst=RandIP())/SCTP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_tcp_pay = {\n-    \"name\": \"iavf_mac_ipv4_tcp_pay\",\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=\"%s\")/IP(src=RandIP(),dst=RandIP())/TCP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP()/TCP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/TCP()/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP(),frag=4)/TCP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  ],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_tcp_frag = {\n-    \"name\": \"iavf_mac_ipv4_tcp_frag\",\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=\"%s\")/IP(src=RandIP()) / TCP(dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP(src=RandIP(),dst=\"192.168.0.2\")/TCP(sport=22,dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  ],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_udp = {\n-    \"name\": \"iavf_mac_ipv4_udp\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types l3-src-only l4-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(src=RandIP())/UDP(dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP(src=RandIP(),dst=\"192.168.0.2\")/UDP(sport=33,dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_udp_frag = {\n-    \"name\": \"iavf_mac_ipv4_udp_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=\"%s\")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP()/UDP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/UDP()/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_sctp = {\n-    \"name\": \"iavf_mac_ipv4_sctp\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types l3-src-only l4-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(src=RandIP())/SCTP(dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP(dst=RandIP())/SCTP(sport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_sctp_frag = {\n-    \"name\": \"iavf_mac_ipv4_sctp_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=\"%s\")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP()/UDP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/UDP()/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv6_l3_src = {\n-    \"name\": \"iavf_mac_ipv6_l3_src\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv6 / end actions rss types l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IPv6(src=RandIP6())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv6_l3_src_frag = {\n-    \"name\": \"iavf_mac_ipv6_l3_src_frag\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv6 / end actions rss types l3-src-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IPv6(src=RandIP6(),dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\" * 480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv6_l3_dst = {\n-    \"name\": \"iavf_mac_ipv6_l3_dst\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv6 / end actions rss types l3-dst-only end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IPv6(dst=RandIP6())/IPv6ExtHdrFragment()/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\",dst=RandIP6())/IPv6ExtHdrFragment()/(\"X\" * 480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv6_pay = {\n-    \"name\": \"iavf_mac_ipv6_pay\",\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=\"%s\")/IPv6(src=RandIP6(),dst=RandIP6())/IPv6ExtHdrFragment()/ICMP()/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv6_sctp_pay = {\n-    \"name\": \"iavf_mac_ipv6_sctp_pay\",\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=\"%s\")/IPv6(src=RandIP6())/SCTP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/SCTP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-tv_iavf_mac_ipv6_udp = {\n-    \"name\": \"iavf_mac_ipv6_udp\",\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=\"%s\")/IPv6(src=RandIP6()) / UDP(sport=RandShort(), dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv6_udp_frag = {\n-    \"name\": \"iavf_mac_ipv6_udp_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=\"%s\")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/UDP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv6_tcp = {\n-    \"name\": \"iavf_mac_ipv6_tcp\",\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=\"%s\")/IPv6(src=RandIP6())/TCP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv6_tcp_frag = {\n-    \"name\": \"iavf_mac_ipv6_tcp_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=\"%s\")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/TCP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/UDP(sport=25,dport=99)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+    ],\n }\n \n-tv_iavf_mac_cvlan_rss = {\n-    \"name\": \"iavf_mac_cvlan_rss\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / vlan / ipv4 / end actions rss types c-vlan end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether()/Dot1Q(vlan=RandShort())/IP(src=RandIP())/UDP()/(\"X\"*480)',\n-                  'Ether(type=0x9100)/Dot1Q(vlan=RandShort())/Dot1Q(vlan=56)/IP(src=RandIP())/UDP()/(\"X\"*480)',\n-                  ],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n }\n \n-tv_iavf_mac_ipv4_pfcp_session = {\n-    \"name\": \"iavf_mac_ipv4_pfcp_session\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end\",\n-    \"scapy_str\": [\n-        'Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=1, SEID=12)/Raw(\"X\"*480)' % vf0_mac,\n-        'Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=0)/(\"X\"*480)' % vf0_mac,\n-        'Ether(dst=\"%s\")/IPv6()/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=1, SEID=12)/(\"X\"*480)' % vf0_mac,\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n     ],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n }\n \n-tv_iavf_mac_ipv6_pfcp_session = {\n-    \"name\": \"iavf_mac_ipv6_pfcp_session\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv6 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IPv6()/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=1, SEID=12)/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IPv6()/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=0)/(\"X\"*480)' % vf0_mac,\n-                  'Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=1, SEID=12)/'\n-                  '(\"X\"*480)' % vf0_mac,\n-                  ],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n }\n \n-tv_iavf_gtpu_ipv4_up_match_dismatch = {\n-    \"name\": \"iavf_gtpu_ipv4_up_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / \"\n-                        \"end actions rss types ipv4 l3-src-only end key_len 0 queues end / end\",\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"match_str\": ['Ether(src=\"00:00:00:00:01:01\",dst=\"%s\")/IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255,teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34) / IP(src=RandIP()) /(\"X\"*480)' % vf0_mac],\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\",dst=\"%s\")/IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255,teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) / IP(dst=RandIP()) /(\"X\"*480)' % vf0_mac,\n-                     'Ether(src=\"00:00:00:00:01:01\",dst=\"%s\")/IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255,teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) / IP(dst=RandIP()) / UDP() /(\"X\"*480)' % vf0_mac,\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n }\n \n-tv_iavf_gtpu_ipv4_down_match_dismatch = {\n-    \"name\": \"iavf_gtpu_ipv4_down_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / \"\n-                        \"end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end\",\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/UDP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"match_str\": ['Ether(src=\"00:00:00:00:01:01\",dst=\"%s\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst=RandIP())/(\"X\"*480)' % vf0_mac],\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': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\",dst=\"%s\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP())/(\"X\"*480)' % vf0_mac,\n-                     ],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/TCP(sport=25,dport=99)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+    ],\n }\n \n-tv_iavf_gtpu_ipv4_frag_up_match_dismatch = {\n-    \"name\": \"iavf_gtpu_ipv4_frag_up_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / end actions rss types ipv4 l3-src-only end \"\n-                        \"key_len 0 queues end / end \",\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': ' Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/TCP(sport=25,dport=99)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+    ],\n+}\n \n-    \"match_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP(),frag=6)/(\"X\"*480)' % vf0_mac],\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/TCP(sport=25,dport=99)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+    ],\n+}\n \n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=RandIP(),frag=6)/(\"X\"*480)' % vf0_mac],\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n }\n \n-tv_iavf_gtpu_ipv4_frag_down_match_dismatch = {\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"name\": \"iavf_gtpu_ipv4_frag_down_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end \"\n-                        \"key_len 0 queues end / end \",\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"match_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) / IP(dst=RandIP(), frag=6) /(\"X\"*480)' % vf0_mac],\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34) / IP(src=RandIP(), frag=6) /(\"X\"*480)' % vf0_mac],\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n }\n \n-tv_iavf_gtpu_ipv4_udp_up_match_dismatch = {\n-    \"name\": \"iavf_gtpu_ipv4_udp_up_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / udp / end actions rss types ipv4-udp \"\n-                        \"l3-src-only end key_len 0 queues end / end\",\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/TCP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"match_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP()) / UDP(dport=RandShort())/(\"X\"*480)' % vf0_mac],\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': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst=RandIP()) / UDP(dport=RandShort())/(\"X\"*480)' % vf0_mac],\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/SCTP(sport=25,dport=99)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+    ],\n+}\n \n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': ' Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/SCTP(sport=25,dport=99)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+    ],\n }\n \n-tv_iavf_gtpu_ipv4_udp_down_match_dismatch = {\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.3\", src=\"192.168.0.5\")/SCTP(sport=25,dport=99)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+    ],\n+}\n \n-    \"name\": \"iavf_gtpu_ipv4_udp_down_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end \"\n-                        \"key_len 0 queues end / end \",\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"match_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) / IP(dst=RandIP(), frag=6) /(\"X\"*480)' % vf0_mac],\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34) / IP(src=RandIP(), frag=6) /(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n }\n \n-tv_iavf_gtpu_ipv4_tcp_up_match_dismatch = {\n-    \"name\": \"iavf_gtpu_ipv4_tcp_up_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / tcp /\"\n-                        \" end actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end\",\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"match_str\": ['Ether(dst=\"%s\") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP())/TCP(dport=RandShort())/(\"X\"*480)' % vf0_mac],\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / TCP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst=RandIP())/TCP(dport=RandShort())/(\"X\"*480)' % vf0_mac],\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n }\n \n-tv_iavf_gtpu_ipv4_tcp_down_match_dismatch = {\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IP(dst=\"192.168.1.1\", src=\"192.168.1.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"name\": \"iavf_gtpu_ipv4_tcp_down_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / tcp /\"\n-                        \" end actions rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end\",\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': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=33)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=32,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.1.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.1.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],\n+            'action': {'check_hash_different': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"match_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=RandIP())/TCP(dport=RandShort())/(\"X\"*480)' % vf0_mac],\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+    ],\n+}\n \n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / TCP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=RandIP())/TCP(dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n+mac_ipv6_l2_dst = {\n+    'sub_casename': 'mac_ipv6_l2_dst',\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2025\")/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2027\")/IPv6ExtHdrFragment()/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2923\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2027\")/ICMP()/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+    ],\n }\n \n-tv_iavf_gtpu_ipv4_icmp_up_match_dismatch = {\n-    \"name\": \"iavf_gtpu_ipv4_icmp_up_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / end actions rss types ipv4 l3-src-only end \"\n-                        \"key_len 0 queues end / end\",\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+    ],\n+}\n \n-    \"match_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP())/ICMP()/(\"X\"*480)' % vf0_mac],\n+mac_ipv6_l3_src = {\n+    'sub_casename': 'mac_ipv6_l3_src',\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/IPv6ExtHdrFragment()/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/ICMP()/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'][0],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst=RandIP())/ICMP()/(\"X\"*480)' % vf0_mac],\n+mac_ipv6_l3_dst = {\n+    'sub_casename': 'mac_ipv6_l3_dst',\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2928\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'][0],\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+}\n \n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/IPv6ExtHdrFragment()/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/ICMP()/(\"X\"*480)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/IP()/NVGRE()/Ether()/IPv6(src=\"ABAB:910B:6666:3457:8295:3333:1800:2929\",dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/(\"X\"*480)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],\n+            'action': {'check_hash_different': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],\n+            'action': {'check_hash_different': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],\n+            'action': {'check_hash_different': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'][0],\n+        #     'action': {'check_hash_different': 'nvgre'},\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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+    ],\n }\n \n-tv_iavf_gtpu_ipv4_icmp_down_match_dismatch = {\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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+    ],\n+}\n \n-    \"name\": \"iavf_gtpu_ipv4_icmp_down_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end \"\n-                        \"key_len 0 queues end / end\",\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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+    ],\n+}\n \n-    \"match_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=RandIP())/ICMP()/(\"X\"*480)' % vf0_mac],\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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+}\n \n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=RandIP())/ICMP()/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n }\n \n-tv_iavf_gtpu_ipv4_sctp_up_match_dismatch = {\n-    \"name\": \"iavf_gtpu_ipv4_sctp_up_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / end actions rss types l3-src-only end \"\n-                        \"key_len 0 queues end / end\",\n-    \"match_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP())/SCTP()/(\"X\"*480)' % vf0_mac],\n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst=RandIP())/SCTP()/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+}\n \n-tv_iavf_gtpu_ipv4_sctp_down_match_dismatch = {\n-    \"name\": \"iavf_gtpu_ipv4_sctp_down_match_dismatch\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types l3-dst-only end \"\n-                        \"key_len 0 queues end / end\",\n-    \"match_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=RandIP())/SCTP()/(\"X\"*480)' % vf0_mac],\n-    \"dismatch_str\": ['Ether(src=\"00:00:00:00:01:01\", dst=\"%s\") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'\n-                     'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=RandIP())/SCTP()/(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_mac_ipv4_tcp_inputset = {\n-    \"name\": \"iavf_mac_ipv4_tcp_inputset\",\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-    \"pf_rule\": \"rx-flow-hash tcp4 sdfn\",\n-    \"check_pf_rule_set\": \"rx-flow-hash tcp4\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/TCP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"pf_scapy\": ['Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/TCP(sport=RandShort(),dport=RandShort())/(\"X\"*480)'],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue,\n-    \"check_pf_rss_func\": rfc.check_pf_rss_queue\n-}\n-\n-tv_mac_ipv4_udp_inputset = {\n-    \"name\": \"iavf_mac_ipv4_udp_inputset\",\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-    \"pf_rule\": \"rx-flow-hash udp4 sdfn\",\n-    \"check_pf_rule_set\": \"rx-flow-hash udp4\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"pf_scapy\": ['Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/(\"X\"*480)'],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue,\n-    \"check_pf_rss_func\": rfc.check_pf_rss_queue\n-}\n-\n-tv_mac_ipv4_sctp_inputset = {\n-    \"name\": \"iavf_mac_ipv4_sctp_inputset\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-sctp4 end key_len 0 queues end / end\",\n-    \"pf_rule\": \"rx-flow-hash sctp4 sdfn\",\n-    \"check_pf_rule_set\": \"rx-flow-hash sctp4\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/SCTP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"pf_scapy\": ['Ether(dst=\"%s\")/IP(src=RandIP(),dst=RandIP())/SCTP()/(\"X\"*480)'],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue,\n-    \"check_pf_rss_func\": rfc.check_pf_rss_queue\n-}\n-\n-tv_mac_ipv6_tcp_inputset = {\n-    \"name\": \"iavf_mac_ipv6_tcp_inputset\",\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-    \"pf_rule\": \"rx-flow-hash tcp6 sdfn\",\n-    \"check_pf_rule_set\": \"rx-flow-hash tcp6\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IPv6(src=RandIP6(),dst=RandIP6())/TCP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"pf_scapy\": ['Ether(dst=\"%s\")/IPv6(src=RandIP6(),dst=RandIP6())/TCP(sport=RandShort(),dport=RandShort())/(\"X\"*480)'],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue,\n-    \"check_pf_rss_func\": rfc.check_pf_rss_queue\n-}\n-\n-tv_mac_ipv6_udp_inputset = {\n-    \"name\": \"iavf_mac_ipv6_udp_inputset\",\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-    \"pf_rule\": \"rrx-flow-hash udp6 sdfn\",\n-    \"check_pf_rule_set\": \"rx-flow-hash udp6\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IPv6(src=RandIP6(),dst=RandIP6())/UDP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"pf_scapy\": ['Ether(dst=\"%s\")/IPv6(src=RandIP6(),dst=RandIP6())/UDP(sport=RandShort(),dport=RandShort())/(\"X\"*480)'],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue,\n-    \"check_pf_rss_func\": rfc.check_pf_rss_queue\n-}\n-\n-tv_mac_ipv6_sctp_inputset = {\n-    \"name\": \"iavf_mac_ipv6_sctp_inputset\",\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-    \"pf_rule\": \"rx-flow-hash sctp6 sdfn\",\n-    \"check_pf_rule_set\": \"rx-flow-hash sctp6\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IPv6(src=RandIP6(),dst=RandIP6())/SCTP(sport=RandShort(),dport=RandShort())/(\"X\"*480)' % vf0_mac],\n-    \"pf_scapy\": ['Ether(dst=\"%s\")/IPv6(src=RandIP6(),dst=RandIP6())/SCTP()/(\"X\"*480)'],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue,\n-    \"check_pf_rss_func\": rfc.check_pf_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_l2tpv3 = {\n-    \"name\": \"iavf_mac_ipv4_l2tpv3\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(src=\"192.168.0.3\", proto=115)/L2TP(hex(RandNum(16,255))[1:]+\"\\\\x00\\\\x00\\\\x00\")/Raw(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv6_l2tpv3 = {\n-    \"name\": \"iavf_mac_ipv6_l2tpv3\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv6 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IPv6(src=\"1111:2222:3333:4444:5555:6666:7777:8888\", nh=115)/L2TP(hex(RandNum(16,255))[1:]+\"\\\\x00\\\\x00\\\\x00\")/Raw(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_esp = {\n-    \"name\": \"iavf_mac_ipv4_esp\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / esp / end actions rss types esp end key_len 0 queues end / end\",\n-    \"scapy_str\": ['Ether(dst=\"%s\")/IP(src=\"192.168.0.3\", proto=50)/ESP(spi=RandShort())/Raw(\"X\"*480)' % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv6_esp = {\n-    \"name\": \"iavf_mac_ipv6_esp\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv6 / esp / end actions rss types esp end key_len 0 queues end / end\",\n-    \"scapy_str\": [\"Ether(dst='%s')/IPv6(src='1111:2222:3333:4444:5555:6666:7777:8888', nh=50)/ESP(spi=RandShort())/Raw('X'*480)\" % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv4_ah = {\n-    \"name\": \"iavf_mac_ipv4_ah\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv4 / ah / end actions rss types ah end key_len 0 queues end / end\",\n-    \"scapy_str\": [\"Ether(dst='%s')/IP(src='192.168.0.3', proto=51)/AH(spi=RandShort())/Raw('X'*480)\" % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tv_iavf_mac_ipv6_ah = {\n-    \"name\": \"iavf_mac_ipv6_ah\",\n-    \"rte_flow_pattern\": \"flow create 0 ingress pattern eth / ipv6 / ah / end actions rss types ah end key_len 0 queues end / end\",\n-    \"scapy_str\": [\"Ether(dst='%s')/IPv6(src='1111:2222:3333:4444:5555:6666:7777:8888', nh=51)/AH(spi=RandShort())/Raw('X'*480)\" % vf0_mac],\n-    \"send_count\": 100,\n-    \"check_func\": rfc.check_iavf_packets_rss_queue\n-}\n-\n-tvs_iavf_mac_eth_src = [\n-    tv_iavf_mac_eth_src_only,\n-]\n-\n-tvs_iavf_mac_eth_dst = [\n-    tv_iavf_mac_eth_dst_only,\n-]\n-tvs_iavf_mac_rss_ipv4 = [\n-    tv_iavf_mac_ipv4_l3_src,\n-    tv_iavf_mac_ipv4_l3_src_frag,\n-    tv_iavf_mac_ipv4_l3_dst,\n-    tv_iavf_mac_ipv4_l3_dst_frag,\n-    tv_iavf_mac_ipv4_pay,\n-]\n-\n-tvs_iavf_mac_rss_ipv4_icmp = [\n-    tv_iavf_mac_ipv4_l3_src_frag_icmp,\n-    tv_iavf_mac_ipv4_l3_dst_frag_icmp,\n-    tv_iavf_mac_ipv4_pay_frag_icmp\n-]\n-\n-tvs_iavf_mac_rss_ipv4_nvgre = [\n-    tv_iavf_mac_ipv4_l3_src_nvgre,\n-    tv_iavf_mac_ipv4_l3_dst_nvgre,\n-    tv_iavf_mac_ipv4_nvgre_udp_frag,\n-    tv_iavf_mac_ipv4_nvgre_sctp,\n-]\n-\n-tvs_iavf_mac_rss_ipv4_tcp = [\n-    tv_iavf_mac_ipv4_tcp_pay,\n-    tv_iavf_mac_ipv4_tcp_frag,\n-]\n-\n-tvs_iavf_mac_rss_ipv4_udp = [\n-    tv_iavf_mac_ipv4_udp,\n-    tv_iavf_mac_ipv4_udp_frag,\n-]\n-\n-tvs_iavf_mac_rss_ipv4_sctp = [\n-    tv_iavf_mac_ipv4_sctp,\n-    tv_iavf_mac_ipv4_sctp_frag,\n-]\n-\n-tvs_iavf_mac_rss_ipv6 = [\n-    tv_iavf_mac_ipv6_l3_src,\n-    tv_iavf_mac_ipv6_l3_src_frag,\n-    tv_iavf_mac_ipv6_l3_dst,\n-    tv_iavf_mac_ipv6_pay,\n-    # tv_iavf_mac_ipv6_sctp_pay,\n-]\n-\n-tvs_iavf_mac_rss_ipv6_udp = [\n-    tv_iavf_mac_ipv6_udp,\n-    tv_iavf_mac_ipv6_udp_frag,\n-]\n-\n-tvs_iavf_mac_rss_ipv6_tcp = [\n-    tv_iavf_mac_ipv6_tcp,\n-    tv_iavf_mac_ipv6_tcp_frag,\n-]\n-\n-tvs_iavf_mac_rss_cvlan = [\n-    tv_iavf_mac_cvlan_rss,\n-]\n-\n-tvs_iavf_mac_rss_pfcp = [\n-    tv_iavf_mac_ipv4_pfcp_session,\n-    tv_iavf_mac_ipv6_pfcp_session,\n-]\n-\n-tvs_iavf_gtpu_ipv4 = [\n-    tv_iavf_gtpu_ipv4_up_match_dismatch,\n-    tv_iavf_gtpu_ipv4_down_match_dismatch,\n-]\n-\n-tvs_iavf_gtpu_ipv4_frag = [\n-    tv_iavf_gtpu_ipv4_frag_up_match_dismatch,\n-    tv_iavf_gtpu_ipv4_frag_down_match_dismatch,\n-]\n-\n-tvs_iavf_gtpu_ipv4_udp = [\n-    tv_iavf_gtpu_ipv4_udp_up_match_dismatch,\n-    tv_iavf_gtpu_ipv4_udp_down_match_dismatch,\n-]\n-\n-tvs_iavf_gtpu_ipv4_tcp = [\n-    tv_iavf_gtpu_ipv4_tcp_up_match_dismatch,\n-    tv_iavf_gtpu_ipv4_tcp_down_match_dismatch,\n-]\n-\n-tvs_iavf_gtpu_ipv4_icmp = [\n-    tv_iavf_gtpu_ipv4_icmp_up_match_dismatch,\n-    tv_iavf_gtpu_ipv4_icmp_down_match_dismatch,\n-]\n-\n-tvs_iavf_gtpu_ipv4_sctp = [\n-    tv_iavf_gtpu_ipv4_sctp_up_match_dismatch,\n-    tv_iavf_gtpu_ipv4_sctp_down_match_dismatch,\n-]\n-\n-tvs_check_pf_vf_inputset = [\n-    tv_mac_ipv4_tcp_inputset,\n-    tv_mac_ipv4_udp_inputset,\n-    tv_mac_ipv4_sctp_inputset,\n-    tv_mac_ipv6_tcp_inputset,\n-    tv_mac_ipv6_udp_inputset,\n-    tv_mac_ipv6_sctp_inputset,\n-]\n-\n-tvs_iavf_mac_rss_ipv4_l2tpv3 = [tv_iavf_mac_ipv4_l2tpv3]\n-\n-tvs_iavf_mac_rss_ipv6_l2tpv3 = [tv_iavf_mac_ipv6_l2tpv3]\n-\n-tvs_iavf_mac_rss_ipv4_esp = [tv_iavf_mac_ipv4_esp]\n-\n-tvs_iavf_mac_rss_ipv6_esp = [tv_iavf_mac_ipv6_esp]\n-\n-tvs_iavf_mac_rss_ipv4_ah = [tv_iavf_mac_ipv4_ah]\n-\n-tvs_iavf_mac_rss_ipv6_ah = [tv_iavf_mac_ipv6_ah]\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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+}\n+\n+mac_ipv6_udp_l4_dst = {\n+    'sub_casename': 'mac_ipv6_udp_l4_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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\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': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],\n+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},\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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+    ],\n+}\n+\n+mac_ipv6_tcp_l4_dst = {\n+    'sub_casename': 'mac_ipv6_tcp_l4_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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\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': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IPv6()/TCP()/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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],\n+            'action': {'check_hash_different': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],\n+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},\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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+    ],\n+}\n+\n+mac_ipv6_sctp_l4_dst = {\n+    'sub_casename': 'mac_ipv6_sctp_l4_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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\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': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E1\")/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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],\n+            'action': {'check_hash_different': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],\n+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},\n+        # },\n+    ],\n+}\n+# toeplitz related data end\n+\n+mac_ipv4 = [mac_ipv4_l2_src, mac_ipv4_l2_dst, mac_ipv4_l2src_l2dst, 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(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-nonfrag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-nonfrag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-frag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\",frag=6)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-frag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-icmp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-icmp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp-pre'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv4-udp-vlan-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vlan-pre'},\n+        # },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\",frag=6)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-icmp'},\n+        },\n+        {\n+           'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+           'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        # {\n+        #    'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #    'action': {'save_hash': 'ipv4-udp-vlan'},\n+        # },\n+        # {\n+        #    'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #    'action': {'check_hash_same': 'ipv4-udp-vlan'},\n+        # },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6'},\n+        },\n+    ],\n+    'post-test': [\n+         {\n+             'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)' % vf0_mac,\n+             'action': {'save_hash': 'ipv4-nonfrag-post'},\n+         },\n+         {\n+             'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)' % vf0_mac,\n+             'action': {'check_no_hash_or_different': 'ipv4-nonfrag-post'},\n+         },\n+         {\n+             'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\",frag=6)/(\"X\"*480)' % vf0_mac,\n+             'action': {'save_hash': 'ipv4-frag-post'},\n+         },\n+         {\n+             'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\",frag=6)/(\"X\"*480)' % vf0_mac,\n+             'action': {'check_no_hash_or_different': 'ipv4-frag-post'},\n+         },\n+         {\n+             'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+             'action': {'save_hash': 'ipv4-icmp-post'},\n+         },\n+         {\n+             'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/ICMP()/(\"X\"*480)' % vf0_mac,\n+             'action': {'check_no_hash_or_different': 'ipv4-icmp-post'},\n+         },\n+         {\n+             'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+             'action': {'save_hash': 'ipv4-tcp-post'},\n+         },\n+         {\n+             'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+             'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},\n+         },\n+         # {\n+         #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+         #     'action': {'save_hash': 'ipv4-udp-vlan-post'},\n+         # },\n+         # {\n+         #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp-pre'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre-pre'},\n+        # },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre'},\n+        # },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv4-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv4-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv4-udp-post'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_no_hash_or_different': 'nvgre-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_no_hash_or_different': 'nvgre-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-tcp-pre'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},\n+        # },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-tcp'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},\n+        # },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-udp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/TCP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/TCP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-sctp-pre'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},\n+        # },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv4-sctp'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},\n+        # },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/UDP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=22,dport=23)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv4-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/SCTP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv4-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/SCTP(sport=23,dport=22)/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv4-sctp-post'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-nonfrag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-nonfrag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-frag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-frag-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-icmp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-icmp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp-pre'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv6-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv6-pre'},\n+        # },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-frag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-icmp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv6'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv6'},\n+        # },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.1\", src=\"192.168.0.2\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'save_hash': 'ipv4-nonfrag'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"68:05:CA:BB:26:E0\")/IP(dst=\"192.168.0.2\", src=\"192.168.0.1\")/(\"X\"*480)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv4-nonfrag'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-nonfrag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv6-nonfrag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-frag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv6-frag-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-icmp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv6-icmp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv6-udp-post'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv6-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-udp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp-pre'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-eth-ipv6-udp-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre-eth-ipv6-udp-pre'},\n+        # },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-udp'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-eth-ipv6-udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre-eth-ipv6-udp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'ipv6-tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'ipv6-tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-eth-ipv6-tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre-eth-ipv6-tcp'},\n+        # },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-udp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv6-udp-post'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-eth-ipv6-udp-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-tcp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-tcp-pre'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-eth-ipv6-tcp-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre-eth-ipv6-tcp-pre'},\n+        # },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-tcp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-tcp'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-eth-ipv6-tcp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre-eth-ipv6-tcp'},\n+        # },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'nvgre-eth-ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'nvgre-eth-ipv6-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-tcp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv6-tcp-post'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-eth-ipv6-tcp-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\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(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-sctp-pre'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-sctp-pre'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-eth-ipv6-sctp-pre'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_different': 'nvgre-eth-ipv6-sctp-pre'},\n+        # },\n+    ],\n+    'test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-sctp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-sctp'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-eth-ipv6-sctp'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_hash_same': 'nvgre-eth-ipv6-sctp'},\n+        # },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-udp'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-udp'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-sctp-post'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+            'action': {'check_no_hash_or_different': 'ipv6-sctp-post'},\n+        },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'save_hash': 'nvgre-eth-ipv6-sctp-post'},\n+        # },\n+        # {\n+        #     'send_packet': 'Ether(dst=\"%s\", src=\"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)' % vf0_mac,\n+        #     'action': {'check_no_hash_or_different': 'nvgre-eth-ipv6-sctp-post'},\n+        # },\n+    ],\n+}\n+# symmetric related data end\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=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe83:1:a6bf:2ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:ee1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:ee1c::806\", dst=\"fe82:1:a6bf:2ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\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=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe83:1:a6bf:2ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:ee1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe83:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:ee1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\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=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'save_hash': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:2ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:2ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_different': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:ee1c::806\", dst=\"fe82:1:a6bf:1ff:ee1c::806\")/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/UDP(sport=1234, dport=5678)/Raw(\"x\"*64)' % vf0_mac,\n+            'action': {'check_hash_same': 'ipv6-64bit'},\n+        },\n+    ],\n+    'post-test': [\n+        {\n+            'send_packet': 'Ether(dst=\"%s\")/IPv6(src=\"fe81:1:a6bf:1ff:fe1c::806\", dst=\"fe82:1:a6bf:1ff:fe1c::806\")/Raw(\"x\"*64)' % vf0_mac,\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 AdvancedIavfRSSTest(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.dut_session = self.dut.create_session(\"pf_dut\")\n-        self.pmd_session = self.dut.create_session(\"vf_pmd_dut\")\n-        self.pmd_output = PmdOutput(self.dut)\n-        self.pmd_output_vf1 = PmdOutput(self.dut, self.pmd_session)\n-        localPort = self.tester.get_local_port(self.dut_ports[0])\n-        self.used_dut_port = self.dut_ports[0]\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.tx_iface = self.tester.get_interface(localPort)\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+\n+        self.used_dut_port = self.dut_ports[0]\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-        self.ddp_fdir = \"/lib/firmware/updates/intel/ice/ddp/\"\n-        conf_file = 'conf/cvl_advanced_iavf_rss_package.cfg'\n-        conf_info = UserConf(conf_file)\n-        conf_section = conf_info.conf._sections['suite']\n-        self.os_pkg_name = conf_section['os_default_package_file_location']\n-        self.comms_pkg_name = conf_section['comms_package_file_location']\n         self.vf_flag = False\n         self.create_iavf()\n \n+        self.pass_flag = 'passed'\n+        self.fail_flag = 'failed'\n+        self.pkt = Packet()\n+        self.pmd_output = PmdOutput(self.dut)\n+        self.launch_testpmd()\n+        self.rxq = 16\n+        self.rssprocess = RssProcessing(self, self.pmd_output, [self.tester_iface0, self.tester_iface1], self.rxq)\n+        self.logger.info('rssprocess.tester_ifaces: {}'.format(self.rssprocess.tester_ifaces))\n+        self.logger.info('rssprocess.test_case: {}'.format(self.rssprocess.test_case))\n+\n     def set_up(self):\n         \"\"\"\n         Run before each test case.\n         \"\"\"\n-        self.dut.kill_all()\n-\n-    def tear_down(self):\n-        \"\"\"\n-        Run after each test case.\n-        \"\"\"\n-        self.dut.kill_all()\n-        if self.running_case == \"test_vf_reset\":\n-            self.dut.send_expect(\"ip link set %s vf 0 trust off\" % self.pf_interface, \"# \")\n-            self.dut.send_expect(\"ip link set %s vf 0 mac %s\" % (self.pf_interface, vf0_mac), \"# \")\n-        elif self.running_case == \"test_pf_reset\":\n-            self.dut.send_expect(\"ip link set %s vf 0 mac %s\" % (self.pf_interface, vf0_mac), \"# \")\n-\n-    def tear_down_all(self):\n-        \"\"\"\n-        Run after each test suite.\n-        \"\"\"\n-        self.dut.kill_all()\n-        self.destroy_iavf()\n+        self.pmd_output.execute_cmd(\"start\")\n \n     def create_iavf(self):\n \n         if self.vf_flag is False:\n             self.dut.bind_interfaces_linux('ice')\n-            self.dut.generate_sriov_vfs_by_port(self.used_dut_port, 2)\n+            self.dut.generate_sriov_vfs_by_port(self.used_dut_port, 1)\n             self.sriov_vfs_port = self.dut.ports_info[self.used_dut_port]['vfs_port']\n             self.vf_flag = True\n \n@@ -812,10 +5109,8 @@ class AdvancedIavfRSSTest(TestCase):\n                     port.bind_driver(self.drivername)\n \n                 self.vf0_prop = {'opt_host': self.sriov_vfs_port[0].pci}\n-                self.vf1_prop = {'opt_host': self.sriov_vfs_port[1].pci}\n                 self.dut.send_expect(\"ifconfig %s up\" % self.pf_interface, \"# \")\n                 self.dut.send_expect(\"ip link set %s vf 0 mac %s\" % (self.pf_interface, vf0_mac), \"# \")\n-                self.dut.send_expect(\"ip link set %s vf 1 mac %s\" % (self.pf_interface, vf1_mac), \"# \")\n             except Exception as e:\n                 self.destroy_iavf()\n                 raise Exception(e)\n@@ -825,344 +5120,302 @@ class AdvancedIavfRSSTest(TestCase):\n             self.dut.destroy_sriov_vfs_by_port(self.used_dut_port)\n             self.vf_flag = False\n \n-    def create_testpmd_command(self, port_info, pmd_param=None):\n-        \"\"\"\n-        Create testpmd command for non-pipeline mode\n-        \"\"\"\n-        port_pci = port_info['opt_host']\n-        param_str = \" --rxq=16 --txq=16 --port-topology=loop \"\n-        if pmd_param is not None:\n-            param_str = param_str + pmd_param\n-        self.pmd_output.start_testpmd(cores=\"1S/8C/1T\", param=param_str, eal_param=\"-w %s\" % port_pci)\n-        self.pmd_output.execute_cmd(\"set fwd rxonly\", \"testpmd> \", 15)\n-        self.pmd_output.execute_cmd(\"set verbose 1\", \"testpmd> \", 15)\n-        self.pmd_output.execute_cmd(\"port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd\", \"testpmd> \", 15)\n-\n-    def create_testpmd2_command(self, port_info, pmd_param=None):\n-        \"\"\"\n-        Create testpmd command for non-pipeline mode\n-        \"\"\"\n-        self.pmd_session.send_expect(\"cd /root/dpdk/\", \"# \")\n-        port_pci = port_info['opt_host']\n-        param_str = \" --rxq=16 --txq=16 --port-topology=loop \"\n-        if pmd_param is not None:\n-            param_str = param_str + pmd_param\n-        self.pmd_output_vf1.start_testpmd(cores=list(range(9, 16)), param=param_str, eal_param=\"-w %s --file-prefix=multi_vfs_pmd\" % port_pci)\n-        self.pmd_output_vf1.execute_cmd(\"set fwd rxonly\", \"testpmd> \", 15)\n-        self.pmd_output_vf1.execute_cmd(\"set verbose 1\", \"testpmd> \", 15)\n-\n-    def _rte_flow_validate_pattern(self, test_vectors, rss_match=True):\n-        check_result = 0\n-        test_results = []\n-        log_msg = []\n-        for tv in test_vectors:\n-            self.pmd_output.execute_cmd(tv[\"rte_flow_pattern\"])  # create a rule\n-            time.sleep(1)\n-            self.pkg_count = tv[\"send_count\"]\n-            # send packet\n-            if \"match\" in tv[\"name\"]:\n-                for match_pkg in tv[\"match_str\"]:\n-                    out = self._pkg_send(match_pkg, self.pkg_count)\n-                    result, case_msg = tv[\"check_func\"](out, self.pkg_count)\n-                    print(case_msg)\n-                    test_results.append(result)\n-                for dismatch_pkg in tv[\"dismatch_str\"]:\n-                    out = self._pkg_send(dismatch_pkg, self.pkg_count)\n-                    result, case_msg = tv[\"check_func\"](out, self.pkg_count, rss_match=False)\n-                    print(case_msg)\n-                    test_results.append(result)\n-            else:\n-                for scapy_str in tv[\"scapy_str\"]:\n-                    out = self._pkg_send(scapy_str, self.pkg_count)\n-                    result, case_msg = tv[\"check_func\"](out, self.pkg_count, rss_match)\n-                    print(case_msg)\n-                    test_results.append(result)\n-            self.pmd_output.execute_cmd(\"flow destroy 0 rule 0\")\n-\n-            # check test results\n-            if False in test_results:\n-                log_cmd = \"%s test failed\" % tv[\"name\"]\n-                check_result = check_result + 1\n-            else:\n-                log_cmd = \"%s test PASS\" % tv[\"name\"]\n-            log_msg.append(log_cmd)\n-\n-        self.pmd_output.execute_cmd(\"flow flush 0\")\n-        self.pmd_output.quit()\n-        print(log_msg)\n-        self.verify(check_result == 0, \"Some test case failed.\")\n-\n-    def _check_inputset_pattern(self, test_vectors):\n-        for tv in test_vectors:\n-            self.pmd_output.execute_cmd(tv[\"rte_flow_pattern\"])  # create a rule\n-            self.dut_session.send_expect(\"ethtool -N %s %s\" % (self.pf_interface, tv[\"pf_rule\"]), \"# \")\n-            self.dut_session.send_expect(\"ethtool -n %s %s\" % (self.pf_interface, tv[\"check_pf_rule_set\"]), \"# \")\n-            self._set_pf_queue_num()\n-            self.pkg_count = tv[\"send_count\"]\n-            # send vf packet\n-            for scapy_str in tv[\"scapy_str\"]:\n-                pf_rx_0 = self._get_pf_rx()\n-                out = self._pkg_send(scapy_str, self.pkg_count)\n-                result, case_msg = tv[\"check_func\"](out, self.pkg_count)\n-                self.verify(result, case_msg)\n-                # check PF not recieve packets\n-                pf_rx_1 = self._get_pf_rx()\n-                pf_rx = (pf_rx_1 - pf_rx_0)\n-                self.verify(pf_rx == 0, \"pf recieve vf packets!\")\n-\n-            # send pf packet\n-            for pf_scapy_str in tv[\"pf_scapy\"]:\n-                pf_scapy_str = pf_scapy_str % self.pf_mac\n-                self._pkg_send(pf_scapy_str, self.pkg_count)\n-                out = self.dut_session.send_expect(\"ethtool -S %s |grep rx_queue\" % self.pf_interface, \"# \")\n-                result = tv[\"check_pf_rss_func\"](out, self.pkg_count)\n-                self.verify(result, \"PF not do hash\")\n-            self.pmd_output.execute_cmd(\"flow destroy 0 rule 0\")\n-\n-        self.pmd_output.execute_cmd(\"flow flush 0\")\n-        self.pmd_output.quit()\n-\n-    def _pkg_send(self, test_packet, send_count):\n-        self.pmd_output.execute_cmd(\"start\")\n-        pkt = Packet()\n-        for i in range(send_count):\n-            pkt.append_pkt(test_packet)\n-        pkt.send_pkt(self.tester, tx_port=self.tx_iface, count=1)\n-        out = self.pmd_output.execute_cmd(\"stop\", timeout=30)\n-        return out\n-\n-    def _set_pf_queue_num(self):\n-        self.dut_session.send_expect(\"ethtool -L %s rx 10 tx 10\" % self.pf_interface, \"# \")\n-        out = self.dut_session.send_expect(\"ethtool -l %s \" % self.pf_interface, \"# \")\n-        out = out.split(\"Current hardware settings\")[1]\n-        pf_queue_num = re.findall(r'Combined:\\s+(\\d+)', out)[0]\n-        self.verify(int(pf_queue_num) == 10, \"set rx tx queue fail!\")\n-\n-    def _get_pf_rx(self):\n-        out = self.dut_session.send_expect(\"ethtool -l %s \" % self.pf_interface, \"# \")\n-        out = out.split(\"Current hardware settings\")[1]\n-        pf_rx = re.findall(r'RX:\\s+(\\d+)', out)[0]\n-        return int(pf_rx)\n-\n-    def test_iavf_mac_eth_src_rss(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_eth_src)\n-\n-    def test_iavf_mac_eth_dst_rss(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_eth_dst, rss_match=False)\n-\n-    def test_iavf_rss_ipv4(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4)\n-\n-    def test_iavf_rss_ipv4_ICMP(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_icmp)\n-\n-    def test_iavf_rss_ipv4_NVGRE(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_nvgre)\n-\n-    def test_iavf_rss_ipv4_TCP(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_tcp)\n-\n-    def test_iavf_rss_ipv4_UDP(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_udp)\n-\n-    # def test_iavf_rss_ipv4_SCTP(self):\n-    #     self.create_testpmd_command(self.vf0_prop)\n-    #     self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_sctp)\n-\n-    def test_iavf_rss_ipv6(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6)\n-\n-    def test_iavf_rss_ipv6_UDP(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6_udp)\n-\n-    def test_iavf_rss_ipv6_TCP(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6_tcp)\n-\n-    def test_iavf_rss_CVLAN(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_cvlan)\n-\n-    def test_iavf_rss_PFCP(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_pfcp)\n-\n-    def test_iavf_ipv4_gtpu_updown(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4)\n-\n-    def test_iavf_ipv4_frag_gtpu_updown(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4_frag)\n-\n-    def test_iavf_ipv4_udp_gtpu_updown(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4_udp)\n-\n-    def test_iavf_ipv4_tcp_gtpu_updown(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4_tcp)\n-\n-    def test_iavf_ipv4_icmp_gtpu_updown(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4_icmp)\n-\n-    def test_iavf_rss_ipv4_l2tpv3(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_l2tpv3)\n-\n-    def test_iavf_rss_ipv6_l2tpv3(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6_l2tpv3)\n-\n-    def test_iavf_rss_ipv4_esp(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_esp)\n-\n-    def test_iavf_rss_ipv6_esp(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6_esp)\n-\n-    def test_iavf_rss_ipv4_ah(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_ah)\n-\n-    def test_iavf_rss_ipv6_ah(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6_ah)\n-\n-    # def test_iavf_ipv4_sctp_gtpu_updown(self):\n-    #     self.create_testpmd_command(self.vf0_prop)\n-    #     self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4_sctp)\n-\n-    def test_iavf_error_handle(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        error_rule = ['flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',\n-                      'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end']\n-        for rule in error_rule:\n-            out = self.pmd_output.execute_cmd(rule)\n-            self.verify(\"Failed to create flow\" in out, \"Rule can be created\")\n-\n-    def test_vf_reset(self):\n-        self.dut_session.send_expect(\"ip link set %s vf 0 trust on\" % self.pf_interface, \"# \")\n-        self.create_testpmd_command(self.vf0_prop, pmd_param=\"--nb-cores=2\")\n-        flow_rule = \"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end\"\n-        self.pmd_output.execute_cmd(flow_rule)\n-        self.pmd_output.execute_cmd(\"show port 0 rss-hash\")\n-\n-        # send packets with vf0_mac, check hash work\n-        pkg = 'Ether(dst=\"%s\")/IP(dst=RandIP(), frag=5)/SCTP(sport=RandShort())/(\"X\"*480)' % vf0_mac\n-        pkg_count = 100\n-        out = self._pkg_send(pkg, pkg_count)\n-        result, log_str = rfc.check_iavf_packets_rss_queue(out, pkg_count)\n-        self.verify(result is True, log_str)\n-\n-        # reset vf\n-        self.pmd_output.execute_cmd(\"port stop 0\")\n-        self.pmd_output.execute_cmd(\"port reset 0\")\n-        self.pmd_output.execute_cmd(\"port start 0\")\n-        # send packets again with vf0_mac, check not do hash\n-        out = self._pkg_send(pkg, pkg_count)\n-        result, log_str = rfc.check_iavf_packets_rss_queue(out, pkg_count)\n-        self.verify(result is True, log_str)\n-\n-        # reset PF and send packets check hash work\n-        reset_mac = \"00:66:77:88:99:55\"\n-        self.dut_session.send_expect(\"ip link set %s vf 0 mac %s\" % (self.pf_interface, reset_mac), \"# \")\n-        self.pmd_output.execute_cmd(\"port stop 0\")\n-        self.pmd_output.execute_cmd(\"port reset 0\")\n-        self.pmd_output.execute_cmd(\"port start 0\")\n-        pkg = 'Ether(dst=\"%s\")/IP(dst=RandIP(), frag=5)/SCTP(sport=RandShort())/(\"X\"*480)' % reset_mac\n-        out = self._pkg_send(pkg, pkg_count)\n-        result, log_str = rfc.check_iavf_packets_rss_queue(out, pkg_count)\n-        self.verify(result is True, log_str)\n-\n-    def test_pf_reset(self):\n-        param_str = \" --rxq=16 --txq=16 --nb-cores=2\"\n-        self.pmd_output.start_testpmd(cores=\"1S/8C/1T\", param=param_str,\n-                                      eal_param=\"-w %s -w %s\" % (self.vf0_prop['opt_host'], self.vf1_prop['opt_host']))\n-        self.pmd_output.execute_cmd(\"set fwd rxonly\", \"testpmd> \", 15)\n-        self.pmd_output.execute_cmd(\"set verbose 1\", \"testpmd> \", 15)\n-        vf0_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-        vf1_rule = \"flow create 1 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-        self.pmd_output.execute_cmd(vf0_rule)\n-        self.pmd_output.execute_cmd(vf1_rule)\n-        pkg_count = 100\n-\n-        # send packets with vf0_mac and vf1_mac, check hash work\n-        pkg_vf0 = 'Ether(dst=\"%s\")/IP(src=RandIP())/UDP(dport=RandShort())/(\"X\"*480)' % vf0_mac\n-        pkg_vf1 = 'Ether(dst=\"%s\")/IP(dst=RandIP())/UDP(sport=RandShort())/(\"X\"*480)' % vf1_mac\n-\n-        out = self._pkg_send(pkg_vf0, pkg_count)\n-        result, msg = rfc.check_iavf_packets_rss_queue(out, pkg_count)\n-        self.verify(result is True, msg)\n-        out = self._pkg_send(pkg_vf1, pkg_count)\n-        result, msg = rfc.check_iavf_packets_rss_queue(out, pkg_count)\n-        self.verify(result is True, msg)\n-\n-        # PF reset and check hash not do hash\n-        reset_mac = \"00:66:77:88:99:55\"\n-        self.dut_session.send_expect(\"ip link set %s vf 0 mac %s\" % (self.pf_interface, reset_mac), \"# \")\n-        reset_vf0 = 'Ether(dst=\"%s\")/IP(src=RandIP())/UDP(dport=RandShort())/(\"X\"*480)' % reset_mac\n-        out = self._pkg_send(reset_vf0, pkg_count)\n-        out = out.split(\"forward statistics for all ports\")[1]\n-        rx_num = re.findall(r'RX-packets:\\s?(\\d+)', out)[0]\n-        self.verify(int(rx_num) == 0, \"PF reset error\")\n-\n-        out = self._pkg_send(pkg_vf1, pkg_count)\n-        result, msg = rfc.check_iavf_packets_rss_queue(out, pkg_count)\n-        self.verify(result is True, msg)\n-\n-    def test_mutil_vfs(self):\n-        self.create_testpmd_command(self.vf0_prop, pmd_param=\"--nb-cores=2\")\n-        self.create_testpmd2_command(self.vf1_prop, pmd_param=\"--nb-cores=2\")\n-        pkg_count = 100\n-\n-        flow_rule = \"flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-dst-only end key_len 0 queues end / end\"\n-        self.pmd_output.execute_cmd(flow_rule)\n-        self.pmd_output_vf1.execute_cmd(flow_rule)\n-        # send packets and check vf0 not recieved, vf1 hash do work\n-        pkg_vf1 = 'Ether(dst=\"%s\")/IP(dst=RandIP(), frag=5)/SCTP(sport=RandShort())/(\"X\"*480)' % vf1_mac\n-        self.pmd_output_vf1.execute_cmd(\"start\")\n-        self._pkg_send(pkg_vf1, pkg_count)\n-        vf1_out = self.pmd_output_vf1.execute_cmd(\"stop\")\n-        result, msg = rfc.check_iavf_packets_rss_queue(vf1_out, pkg_count)\n-        self.verify(result is True, msg)\n-\n-    def test_check_inputset_with_pf_and_vf(self):\n-        self.create_testpmd_command(self.vf0_prop)\n-        self._check_inputset_pattern(tvs_check_pf_vf_inputset)\n-\n-    def test_use_os_default_package(self):\n-\n-        self.replace_pkg(self.os_pkg_name)\n-        self.create_testpmd_command(self.vf0_prop)\n-        error_rule = [\"flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end \",\n-                      \"flow create 0 ingress pattern eth / ipv6 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end \", ]\n-        try:\n-            for rule in error_rule:\n-                out = self.pmd_output.execute_cmd(rule)\n-                self.verify(\"Failed to create flow\" in out, \"Rule can be created\")\n-        except Exception as e:\n-            raise Exception(e)\n-        finally:\n-            self.pmd_output.quit()\n-            self.replace_pkg(self.comms_pkg_name)\n-\n-    def replace_pkg(self, pkg):\n-        self.dut_session.send_expect(\"cd %s\" % self.ddp_fdir, \"# \")\n-        self.dut_session.send_expect(\"rm -f ice.pkg\", \"# \")\n-        self.dut_session.send_expect(\"cp %s ice.pkg\" % pkg, \"# \")\n-        self.dut_session.send_expect(\"rmmod ice\", \"# \", 15)\n-        self.dut_session.send_expect(\"modprobe ice\", \"# \", 60)\n-        self.vf_flag = False\n-        self.create_iavf()\n+    def launch_testpmd(self):\n+        param = \"--rxq=16 --txq=16\"\n+        self.pmd_output.start_testpmd(cores=\"1S/4C/1T\", param=param,\n+                                            ports=[self.sriov_vfs_port[0].pci], socket=self.ports_socket)\n+        self.pmd_output.execute_cmd(\"port config all rss all\")\n+        self.pmd_output.execute_cmd(\"set fwd rxonly\")\n+        self.pmd_output.execute_cmd(\"set verbose 1\")\n+        res = self.pmd_output.wait_link_status_up('all', timeout=15)\n+        self.verify(res is True, 'there have port link is down')\n+\n+    def test_mac_ipv4(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4)\n+\n+    def test_mac_ipv4_udp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_udp)\n+\n+    def test_mac_ipv4_tcp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_tcp)\n+\n+    def test_mac_ipv4_sctp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_sctp)\n+\n+    def test_mac_ipv6(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6)\n+\n+    def test_mac_ipv6_udp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_udp)\n+\n+    def test_mac_ipv6_tcp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_tcp)\n+\n+    def test_mac_ipv6_sctp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_sctp)\n+\n+    def test_symmetric_mac_ipv4(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_symmetric)\n+\n+    def test_symmetric_mac_ipv4_udp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_udp_symmetric)\n+\n+    def test_symmetric_mac_ipv4_tcp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_tcp_symmetric)\n+\n+    def test_symmetric_mac_ipv4_sctp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_sctp_symmetric)\n+\n+    def test_symmetric_mac_ipv6(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_symmetric)\n+\n+    def test_symmetric_mac_ipv6_udp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_udp_symmetric)\n+\n+    def test_symmetric_mac_ipv6_tcp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_tcp_symmetric)\n+\n+    def test_symmetric_mac_ipv6_sctp(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_sctp_symmetric)\n+\n+    def test_64bit_ipv6_prefix(self):\n+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_64bit_prefix)\n+\n+    def test_negative_case(self):\n+        negative_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 ipv4-udp 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 negative_rules:\n+            out = self.pmd_output.execute_cmd(i, timeout=1)\n+            self.verify('iavf_flow_create(): Failed to create flow' in out, \"rule %s create successfully\" % i)\n+\n+    def test_multirules(self):\n+        # Subcase 1: two rules with same pattern but different hash input set, not hit default profile\n+        self.logger.info('===================Test sub case: multirules subcase 1 ================')\n+        self.rssprocess.error_msgs = []\n+        rule_id_0 = self.rssprocess.create_rule(\n+            '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+            check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)\n+        tests = [\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'save_hash': 'ipv4-udp'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/UDP(dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'check_hash_different': 'ipv4-udp'},\n+            },\n+        ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        rule_id_1 = self.rssprocess.create_rule(\n+            '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+            check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)\n+        tests = [\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'save_hash': 'ipv4-udp'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/UDP(dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'check_hash_same': 'ipv4-udp'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.7\")/UDP(dport=45)/Raw(\"x\"*480)' % vf0_mac,\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=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'save_hash': 'ipv4-udp'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.9\")/UDP(dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'check_hash_different': 'ipv4-udp'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.9\")/UDP(dport=45)/Raw(\"x\"*480)' % vf0_mac,\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+        self.dut.send_command(\"flow flush 0\", timeout=1)\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(\n+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',\n+            check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)\n+        tests = [\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'save_hash': 'ipv4-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'check_hash_different': 'ipv4-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.8\")/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'check_hash_same': 'ipv4-pay'},\n+            },\n+        ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        rule_id_1 = self.rssprocess.create_rule(\n+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',\n+            check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)\n+        tests = [\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'save_hash': 'ipv4-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'check_hash_same': 'ipv4-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.7\")/Raw(\"x\"*480)' % vf0_mac,\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=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/Raw(\"x\"*480)' % vf0_mac,\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+        self.dut.send_command(\"flow flush 0\", timeout=1)\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(\n+            '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+            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=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'save_hash': 'ipv4-udp-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=25, dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'check_hash_different': 'ipv4-udp-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.8\")/UDP(sport=23, dport=44)/Raw(\"x\"*480)' % vf0_mac,\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(\n+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',\n+            check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)\n+        tests = [\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'save_hash': 'ipv4-udp-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'check_hash_different': 'ipv4-udp-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.8\")/UDP(sport=25, dport=99)/Raw(\"x\"*480)' % vf0_mac,\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=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'check_no_hash': 'ipv4-udp-pay'},\n+            },\n+        ]\n+        self.rssprocess.handle_tests(tests, 0)\n+        self.dut.send_command(\"flow flush 0\", timeout=1)\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(\n+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',\n+            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=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'save_hash': 'ipv4-udp-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'check_hash_different': 'ipv4-udp-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.8\")/UDP(sport=25, dport=99)/Raw(\"x\"*480)' % vf0_mac,\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(\n+            '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+            check_stats=True)\n+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)\n+        tests = [\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'save_hash': 'ipv4-udp-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=25, dport=45)/Raw(\"x\"*480)' % vf0_mac,\n+                'action': {'check_hash_different': 'ipv4-udp-pay'},\n+            },\n+            {\n+                'send_packet': 'Ether(dst=\"%s\")/IP(src=\"192.168.0.7\",dst=\"192.168.0.8\")/UDP(sport=23, dport=44)/Raw(\"x\"*480)' % vf0_mac,\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=\"%s\")/IP(src=\"192.168.0.3\",dst=\"192.168.0.5\")/UDP(sport=23, dport=45)/Raw(\"x\"*480)' % vf0_mac,\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+        self.destroy_iavf()\n",
    "prefixes": [
        "V4",
        "3/8"
    ]
}