test suite reviews and discussions
 help / color / Atom feed
* [dts] [PATCH V4 0/8] tests: update or add rss related suites
@ 2020-11-03  8:36 Haiyang Zhao
  2020-11-03  8:36 ` [dts] [PATCH V4 1/8] tests/rte_flow_common: add a common module to process rss test Haiyang Zhao
                   ` (8 more replies)
  0 siblings, 9 replies; 16+ messages in thread
From: Haiyang Zhao @ 2020-11-03  8:36 UTC (permalink / raw)
  To: dts, qi.fu; +Cc: Haiyang Zhao

v4:
-rebase cvl_advanced_iavf_rss as it updated.

v3:
-use GTPPDUSessionContainer instead of GTP_PDUSession_ExtensionHeader
 as scapy updated to 2.4.4.

v2:
- tidy up the rss related suite into a patch set
- fix license issue.

v1: 
- autmaitc the rss related suites with the common interface

Haiyang Zhao (2):
  tests/rte_flow_common: add a common module to process rss test
  tests/cvl_advanced_rss_gtpu: add cvl_advanced_rss_gtpu

Xie wei (2):
  tests/TestSuite_cvl_advanced_rss:update script
  tests/TestSuite_cvl_advanced_iavf_rss:update script

Zhimin Huang (1):
  tests/cvl_advanced_iavf_rss_gtpu:add iavf rss gtpu suite

sunqin (3):
  tests/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp
  conf/cvl_advanced_rss_pppoe
  tests/cvl_advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp add cvl rss iavf
    test suite

 conf/cvl_advanced_rss_pppoe.cfg               |    5 +
 tests/TestSuite_cvl_advanced_iavf_rss.py      | 6305 ++++++++++--
 tests/TestSuite_cvl_advanced_iavf_rss_gtpu.py | 8964 +++++++++++++++++
 ...advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py | 1046 ++
 tests/TestSuite_cvl_advanced_rss.py           | 6944 +++++++++++--
 tests/TestSuite_cvl_advanced_rss_gtpu.py      | 5294 ++++++++++
 ...dvanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp.py | 5461 ++++++++++
 tests/rte_flow_common.py                      |  391 +
 8 files changed, 32506 insertions(+), 1904 deletions(-)
 create mode 100644 conf/cvl_advanced_rss_pppoe.cfg
 create mode 100755 tests/TestSuite_cvl_advanced_iavf_rss_gtpu.py
 create mode 100644 tests/TestSuite_cvl_advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py
 create mode 100755 tests/TestSuite_cvl_advanced_rss_gtpu.py
 create mode 100644 tests/TestSuite_cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp.py

-- 
2.17.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dts] [PATCH V4 1/8] tests/rte_flow_common: add a common module to process rss test
  2020-11-03  8:36 [dts] [PATCH V4 0/8] tests: update or add rss related suites Haiyang Zhao
@ 2020-11-03  8:36 ` Haiyang Zhao
  2020-11-03  8:36 ` [dts] [PATCH V4 2/8] tests/TestSuite_cvl_advanced_rss:update script Haiyang Zhao
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 16+ messages in thread
From: Haiyang Zhao @ 2020-11-03  8:36 UTC (permalink / raw)
  To: dts, qi.fu; +Cc: Haiyang Zhao

*.add a class named RssProcessing to process rss tests.

Signed-off-by: Haiyang Zhao <haiyangx.zhao@intel.com>
---
 tests/rte_flow_common.py | 391 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 391 insertions(+)

diff --git a/tests/rte_flow_common.py b/tests/rte_flow_common.py
index 8a4cded..43c0eab 100644
--- a/tests/rte_flow_common.py
+++ b/tests/rte_flow_common.py
@@ -33,6 +33,7 @@ import json
 import time
 import re
 from utils import GREEN, RED
+from packet import Packet
 
 CVL_TXQ_RXQ_NUMBER = 16
 
@@ -672,3 +673,393 @@ def check_pf_rss_queue(out, count):
         return True
     else:
         return False
+
+
+class RssProcessing(object):
+    def __init__(self, test_case, pmd_output, tester_ifaces, rxq):
+        self.test_case = test_case
+        self.pmd_output = pmd_output
+        self.tester_ifaces = tester_ifaces
+        self.rxq = rxq
+        self.logger = test_case.logger
+        self.pkt = Packet()
+        self.verify = self.test_case.verify
+        self.pass_flag = 'passed'
+        self.fail_flag = 'failed'
+        self.current_saved_hash = ''
+        self.hash_records = {}
+        self.handle_output_methods = {
+            'save_hash': self.save_hash,
+            'save_or_no_hash': self.save_or_no_hash,
+            'check_hash_different': self.check_hash_different,
+            'check_no_hash_or_different': self.check_no_hash_or_different,
+            'check_hash_same': self.check_hash_same,
+            'check_no_hash': self.check_no_hash,
+        }
+        self.error_msgs = []
+
+    def save_hash(self, out, key='', port_id=0):
+        hashes, rss_distribute = self.get_hash_verify_rss_distribute(out, port_id)
+        if len(key) != 0:
+            self.hash_records[key] = hashes
+        self.current_saved_hash = hashes
+        if not rss_distribute:
+            error_msg = 'the packet do not distribute by rss'
+            self.logger.error(error_msg)
+            self.error_msgs.append(error_msg)
+
+    def save_or_no_hash(self, out, key='', port_id=0):
+        hashes, queues = self.get_hash_and_queues(out, port_id)
+        if len(hashes) == 0:
+            self.logger.info('There no hash value passed as expected')
+            if set(queues) != {'0x0'}:
+                error_msg = 'received queues should all be 0, but are {}'.format(queues)
+                self.logger.error(error_msg)
+                self.error_msgs.append(error_msg)
+            return
+        if len(key) != 0:
+            self.hash_records[key] = hashes
+        self.current_saved_hash = hashes
+        if not self.verify_rss_distribute(hashes, queues):
+            error_msg = 'the packet do not distribute by rss'
+            self.logger.error(error_msg)
+            self.error_msgs.append(error_msg)
+
+    def check_hash_different(self, out, key='', port_id=0):
+        hashes, rss_distribute = self.get_hash_verify_rss_distribute(out, port_id)
+        if len(key) == 0:
+            if hashes == self.current_saved_hash:
+                error_msg = 'hash value {} should be different ' \
+                            'with current saved hash {}'.format(hashes, self.current_saved_hash)
+                self.logger.error(error_msg)
+                self.error_msgs.append(error_msg)
+        else:
+            if hashes == self.hash_records[key]:
+                error_msg = 'hash value {} should be different ' \
+                            'with {} {}'.format(hashes, key, self.hash_records[key])
+                self.logger.error(error_msg)
+                self.error_msgs.append(error_msg)
+        if not rss_distribute:
+            error_msg = 'the packet do not distribute by rss'
+            self.logger.error(error_msg)
+            self.error_msgs.append(error_msg)
+
+    def check_no_hash(self, out, port_id=0):
+        hashes, queues = self.get_hash_and_queues(out, port_id)
+        if len(hashes) != 0:
+            error_msg = 'hash value {} should be empty'.format(hashes)
+            self.logger.error(error_msg)
+            self.error_msgs.append(error_msg)
+        elif set(queues) != {'0x0'}:
+            error_msg = 'received queues should all be 0, but are {}'.format(queues)
+            self.logger.error(error_msg)
+            self.error_msgs.append(error_msg)
+
+    def check_no_hash_or_different(self, out, key='', port_id=0):
+        hashes, queues = self.get_hash_and_queues(out, port_id)
+        if len(hashes) == 0:
+            self.logger.info('There no hash value passed as expected')
+            if set(queues) != {'0x0'}:
+                error_msg = 'received queues should all be 0, but are {}'.format(queues)
+                self.logger.error(error_msg)
+                self.error_msgs.append(error_msg)
+            return
+        if len(key) == 0:
+            if hashes == self.current_saved_hash:
+                error_msg = 'hash value {} should be different ' \
+                            'with current saved hash {}'.format(hashes, self.current_saved_hash)
+                self.logger.error(error_msg)
+                self.error_msgs.append(error_msg)
+        else:
+            if hashes == self.hash_records[key]:
+                error_msg = 'hash value {} should be different ' \
+                            'with {} {}'.format(hashes, key, self.hash_records[key])
+                self.logger.error(error_msg)
+                self.error_msgs.append(error_msg)
+
+    def check_hash_same(self, out, key='', port_id=0):
+        hashes, rss_distribute = self.get_hash_verify_rss_distribute(out, port_id)
+        if len(key) == 0:
+            if hashes != self.current_saved_hash:
+                error_msg = 'hash value {} should be same ' \
+                            'with current saved hash {}'.format(hashes, self.current_saved_hash)
+                self.logger.error(error_msg)
+                self.error_msgs.append(error_msg)
+        else:
+            if hashes != self.hash_records[key]:
+                error_msg = 'hash value {} should be same ' \
+                            'with {} {}'.format(hashes, key, self.hash_records[key])
+                self.logger.error(error_msg)
+                self.error_msgs.append(error_msg)
+        if not rss_distribute:
+            error_msg = 'the packet do not distribute by rss'
+            self.logger.error(error_msg)
+            self.error_msgs.append(error_msg)
+
+    def check_hash_same_or_no_hash(self, out, key='', port_id=0):
+        hashes, rss_distribute = self.get_hash_verify_rss_distribute(out, port_id)
+        if len(hashes) != 0:
+            error_msg = 'hash value {} should be empty'.format(hashes)
+            self.logger.error(error_msg)
+            self.error_msgs.append(error_msg)
+            return
+        elif set(rss_distribute) != {'0x0'}:
+            error_msg = 'received queues should all be 0, but are {}'.format(rss_distribute)
+            self.logger.error(error_msg)
+            self.error_msgs.append(error_msg)
+            return
+        if len(key) == 0:
+            if hashes != self.current_saved_hash:
+                error_msg = 'hash value {} should be same ' \
+                            'with current saved hash {}'.format(hashes, self.current_saved_hash)
+                self.logger.error(error_msg)
+                self.error_msgs.append(error_msg)
+        else:
+            if hashes != self.hash_records[key]:
+                error_msg = 'hash value {} should be same ' \
+                            'with {} {}'.format(hashes, key, self.hash_records[key])
+                self.logger.error(error_msg)
+                self.error_msgs.append(error_msg)
+        if not rss_distribute:
+            error_msg = 'the packet do not distribute by rss'
+            self.logger.error(error_msg)
+            self.error_msgs.append(error_msg)
+
+    def verify_rss_distribute(self, hashes, queues):
+        if len(hashes) != len(queues):
+            self.logger.warning('hash length {} != queue length {}'.format(hashes, queues))
+            return False
+        for i in range(len(hashes)):
+            if int(hashes[i], 16) % self.rxq != int(queues[i], 16):
+                self.logger.warning('hash values {} mod total queues {} != queue {}'
+                                    .format(hashes[i], self.rxq, queues[i]))
+                return False
+        return True
+
+    def get_hash_verify_rss_distribute(self, out, port_id=0):
+        hashes, queues = self.get_hash_and_queues(out, port_id)
+        if len(hashes) == 0:
+            return [], False
+        return hashes, self.verify_rss_distribute(hashes, queues)
+
+    def get_hash_and_queues(self, out, port_id=0):
+        hash_pattern = re.compile('port\s%s/queue\s\d+:\sreceived\s\d+\spackets.+?\n.*RSS\shash=(\w+)\s-\sRSS\squeue=(\w+)' % port_id)
+        hash_infos = hash_pattern.findall(out)
+        self.logger.info('hash_infos: {}'.format(hash_infos))
+        if len(hash_infos) == 0:
+            queue_pattern = re.compile('Receive\squeue=(\w+)')
+            queues = queue_pattern.findall(out)
+            return [], queues
+        # hashes = [int(hash_info[0], 16) for hash_info in hash_infos]
+        hashes = [hash_info[0].strip() for hash_info in hash_infos]
+        queues = [hash_info[1].strip() for hash_info in hash_infos]
+        return hashes, queues
+
+    def send_pkt_get_output(self, pkts, port_id=0, count=1, interval=0):
+        self.pkt.update_pkt(pkts)
+        tx_port = self.tester_ifaces[0] if port_id == 0 else self.tester_ifaces[1]
+        self.logger.info('----------send packet-------------')
+        self.logger.info('{}'.format(pkts))
+        self.pkt.send_pkt(crb=self.test_case.tester, tx_port=tx_port, count=count, interval=interval)
+        out = self.pmd_output.get_output(timeout=1)
+        pkt_pattern = 'port\s%d/queue\s\d+:\sreceived\s(\d+)\spackets.+?\n.*length=\d{2,}\s' % port_id
+        reveived_data = re.findall(pkt_pattern, out)
+        reveived_pkts = sum(map(int, [i[0] for i in reveived_data]))
+        if isinstance(pkts, list):
+            self.verify(reveived_pkts == len(pkts) * count,
+                        'expect received %d pkts, but get %d instead' % (len(pkts) * count, reveived_pkts))
+        else:
+            self.verify(reveived_pkts == 1 * count,
+                        'expect received %d pkts, but get %d instead' % (1 * count, reveived_pkts))
+        return out
+
+    def send_pkt_get_hash_queues(self, pkts, port_id=0, count=1, interval=0):
+        output = self.send_pkt_get_output(pkts, port_id, count, interval)
+        hashes, queues = self.get_hash_and_queues(output, port_id)
+        return hashes, queues
+
+    def create_rule(self, rule: (list, str), check_stats=True, msg=None):
+        p = re.compile(r"Flow rule #(\d+) created")
+        rule_list = list()
+        if isinstance(rule, list):
+            for i in rule:
+                out = self.pmd_output.execute_cmd(i, timeout=1)
+                if msg:
+                    self.verify(msg in out, "failed: expect %s in %s" % (msg, out))
+                m = p.search(out)
+                if m:
+                    rule_list.append(m.group(1))
+                else:
+                    rule_list.append(False)
+        elif isinstance(rule, str):
+            out = self.pmd_output.execute_cmd(rule, timeout=1)
+            if msg:
+                self.verify(msg in out, "failed: expect %s in %s" % (msg, out))
+            m = p.search(out)
+            if m:
+                rule_list.append(m.group(1))
+            else:
+                rule_list.append(False)
+        else:
+            raise Exception("unsupported rule type, only accept list or str")
+        if check_stats:
+            self.verify(all(rule_list), "some rules create failed, result %s" % rule_list)
+        elif not check_stats:
+            self.verify(not any(rule_list), "all rules should create failed, result %s" % rule_list)
+        return rule_list
+
+    def validate_rule(self, rule, check_stats=True, check_msg=None):
+        flag = 'Flow rule validated'
+        if isinstance(rule, str):
+            if 'create' in rule:
+                rule = rule.replace('create', 'validate')
+            out = self.pmd_output.execute_cmd(rule, timeout=1)
+            if check_stats:
+                self.verify(flag in out.strip(), "rule %s validated failed, result %s" % (rule, out))
+            else:
+                if check_msg:
+                    self.verify(flag not in out.strip() and check_msg in out.strip(),
+                                "rule %s validate should failed with msg: %s, but result %s" % (rule, check_msg, out))
+                else:
+                    self.verify(flag not in out.strip(), "rule %s validate should failed, result %s" % (rule, out))
+        elif isinstance(rule, list):
+            for r in rule:
+                if 'create' in r:
+                    r = r.replace('create', 'validate')
+                out = self.pmd_output.execute_cmd(r, timeout=1)
+                if check_stats:
+                    self.verify(flag in out.strip(), "rule %s validated failed, result %s" % (r, out))
+                else:
+                    if not check_msg:
+                        self.verify(flag not in out.strip(), "rule %s validate should failed, result %s" % (r, out))
+                    else:
+                        self.verify(flag not in out.strip() and check_msg in out.strip(),
+                                    "rule %s should validate failed with msg: %s, but result %s" % (
+                                        r, check_msg, out))
+
+    def check_rule(self, port_id=0, stats=True, rule_list=None):
+        out = self.pmd_output.execute_cmd("flow list %s" % port_id)
+        p = re.compile(r"ID\s+Group\s+Prio\s+Attr\s+Rule")
+        matched = p.search(out)
+        if stats:
+            self.verify(matched, "flow rule on port %s is not existed" % port_id)
+            if rule_list:
+                p2 = re.compile("^(\d+)\s")
+                li = out.splitlines()
+                res = list(filter(bool, list(map(p2.match, li))))
+                result = [i.group(1) for i in res]
+                self.verify(set(rule_list).issubset(set(result)),
+                            "check rule list failed. expect %s, result %s" % (rule_list, result))
+        else:
+            if matched:
+                if rule_list:
+                    res_li = [i.split()[0].strip() for i in out.splitlines() if re.match('\d', i)]
+                    self.verify(not set(rule_list).issubset(res_li), 'rule specified should not in result.')
+                else:
+                    raise Exception('expect no rule listed')
+            else:
+                self.verify(not matched, "flow rule on port %s is existed" % port_id)
+
+    def destroy_rule(self, port_id=0, rule_id=None):
+        if rule_id is None:
+            rule_id = 0
+        if isinstance(rule_id, list):
+            for i in rule_id:
+                out = self.test_case.dut.send_command("flow destroy %s rule %s" % (port_id, i), timeout=1)
+                p = re.compile(r"Flow rule #(\d+) destroyed")
+                m = p.search(out)
+                self.verify(m, "flow rule %s delete failed" % rule_id)
+        else:
+            out = self.test_case.dut.send_command("flow destroy %s rule %s" % (port_id, rule_id), timeout=1)
+            p = re.compile(r"Flow rule #(\d+) destroyed")
+            m = p.search(out)
+            self.verify(m, "flow rule %s delete failed" % rule_id)
+
+    def handle_actions(self, output, actions, port_id=0):
+        if isinstance(actions, dict) or isinstance(actions, str):
+            actions = [actions]
+        for action in actions:  # [{}]
+            self.logger.info('action: {}\n'.format(action))
+            if isinstance(action, str):
+                if action in self.handle_output_methods:
+                    self.handle_output_methods[action](output, port_id=port_id)
+            else:
+                for method in action:  # {'save': ''}
+                    if method in self.handle_output_methods:
+                        if method == 'check_no_hash':
+                            self.check_no_hash(output, port_id=port_id)
+                        else:
+                            self.handle_output_methods[method](output, action[method], port_id=port_id)
+
+    def handle_tests(self, tests, port_id=0):
+        out = ''
+        for test in tests:
+            if 'send_packet' in test:
+                out = self.send_pkt_get_output(test['send_packet'], port_id)
+            if 'action' in test:
+                self.handle_actions(out, test['action'])
+
+    def handle_rss_case(self, case_info):
+        # clear hash_records before each sub case
+        self.hash_records = {}
+        self.error_msgs = []
+        self.current_saved_hash = ''
+        sub_case_name = case_info.get('sub_casename')
+        self.logger.info('===================Test sub case: {}================'.format(sub_case_name))
+        port_id = case_info.get('port_id') if case_info.get('port_id') else 0
+        rules = case_info.get('rule') if case_info.get('rule') else []
+        rule_ids = []
+        if 'pre-test' in case_info:
+            self.logger.info('------------handle pre-test--------------')
+            self.handle_tests(case_info['pre-test'], port_id)
+
+        # handle tests
+        tests = case_info['test']
+        self.logger.info('------------handle test--------------')
+        # validate rule
+        if rules:
+            self.validate_rule(rule=rules, check_stats=True)
+            rule_ids = self.create_rule(rule=case_info['rule'], check_stats=True)
+            self.check_rule(port_id=port_id, rule_list=rule_ids)
+        self.handle_tests(tests, port_id)
+
+        # handle post-test
+        if 'post-test' in case_info:
+            self.logger.info('------------handle post-test--------------')
+            self.destroy_rule(port_id=port_id, rule_id=rule_ids)
+            self.check_rule(port_id=port_id, stats=False)
+            self.handle_tests(case_info['post-test'], port_id)
+        if self.error_msgs:
+            self.verify(False, str(self.error_msgs[:500]))
+
+    def handle_rss_distribute_cases(self, cases_info):
+        sub_cases_result = dict()
+        if not isinstance(cases_info, list):
+            cases_info = [cases_info]
+
+        for case_info in cases_info:
+            try:
+                # self.handle_rss_distribute_case(case_info=case_info)
+                self.handle_rss_case(case_info=case_info)
+            except Exception as e:
+                self.logger.warning('sub_case %s failed: %s' % (case_info['sub_casename'], e))
+                sub_cases_result[case_info['sub_casename']] = self.fail_flag
+            else:
+                self.logger.info('sub_case %s passed' % case_info['sub_casename'])
+                sub_cases_result[case_info['sub_casename']] = self.pass_flag
+            finally:
+                self.pmd_output.execute_cmd('flow flush 0')
+        pass_rate = round(list(sub_cases_result.values()).count(self.pass_flag) / len(sub_cases_result), 4) * 100
+        self.logger.info(sub_cases_result)
+        # self.logger.info('%s pass rate is: %s' % (self.test_case.running_case, pass_rate))
+        self.logger.info('pass rate is: %s' % pass_rate)
+        self.verify(pass_rate == 100.00, 'some subcases failed')
+
+    @staticmethod
+    def get_ipv6_template_by_ipv4(template):
+        if isinstance(template, dict):
+            template = [template]
+        ipv6_template = [eval(str(element).replace('eth / ipv4', 'eth / ipv6')
+                              .replace('IP()', 'IPv6()').replace('mac_ipv4', 'mac_ipv6'))
+                         for element in template]
+        return ipv6_template
-- 
2.17.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dts] [PATCH V4 2/8] tests/TestSuite_cvl_advanced_rss:update script
  2020-11-03  8:36 [dts] [PATCH V4 0/8] tests: update or add rss related suites Haiyang Zhao
  2020-11-03  8:36 ` [dts] [PATCH V4 1/8] tests/rte_flow_common: add a common module to process rss test Haiyang Zhao
@ 2020-11-03  8:36 ` Haiyang Zhao
  2020-11-03  9:07   ` Xie, WeiX
  2020-11-03  8:36 ` [dts] [PATCH V4 3/8] tests/TestSuite_cvl_advanced_iavf_rss:update script Haiyang Zhao
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 16+ messages in thread
From: Haiyang Zhao @ 2020-11-03  8:36 UTC (permalink / raw)
  To: dts, qi.fu; +Cc: Xie wei

From: Xie wei <weix.xie@intel.com>

* according to test plan, update cvl_advanced_rss script.

Signed-off-by: Xie wei <weix.xie@intel.com>
---
 tests/TestSuite_cvl_advanced_rss.py | 6944 +++++++++++++++++++++++----
 1 file changed, 6066 insertions(+), 878 deletions(-)

diff --git a/tests/TestSuite_cvl_advanced_rss.py b/tests/TestSuite_cvl_advanced_rss.py
index 736dcc3..c9c16ec 100644
--- a/tests/TestSuite_cvl_advanced_rss.py
+++ b/tests/TestSuite_cvl_advanced_rss.py
@@ -29,966 +29,6154 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import json
-import time
+
 import re
-import packet
-import os
-from scapy.contrib.gtp import *
-from test_case import TestCase
+import random
+from packet import Packet
 from pmd_output import PmdOutput
-from utils import BLUE, RED
-from collections import OrderedDict
-from packet import IncreaseIP, IncreaseIPv6
-import rte_flow_common as rfc
-
-out = os.popen("pip list|grep scapy ")
-version_result =out.read()
-p=re.compile('scapy\s+2\.3\.\d+')
-m=p.search(version_result)
-
-if not m:
-   GTP_TEID= "teid"
-else:
-   GTP_TEID= "TEID"
-
-tv_mac_ipv4_l3_src_only = {
-    "name":"tv_mac_ipv4_l3_src_only",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.%d")/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_l3_src_only_frag = {
-    "name":"tv_mac_ipv4_l3_src_only_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.%d", frag=5)/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_l3_dst_only = {
-    "name":"tv_mac_ipv4_l3_dst_only",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.%d", frag=5)/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_l3_dst_only_frag = {
-    "name":"tv_mac_ipv4_l3_dst_only_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.%d", frag=5)/SCTP(sport=%d)/("X"*480)' %(i, i+10) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_l3_src_only_frag_icmp = {
-    "name":"tv_mac_ipv4_l3_src_only_frag_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.%d", frag=5)/ICMP()/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_l3_dst_only_frag_icmp = {
-    "name":"tv_mac_ipv4_l3_dst_only_frag_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.%d", frag=5)/ICMP()/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_l3_all = {
-    "name":"tv_mac_ipv4_l3_all",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.%d", dst="192.168.0.%d")/("X"*480)' %(i, i+10) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_l3_all_frag_icmp = {
-    "name":"tv_mac_ipv4_l3_all_frag_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.%d", dst="192.168.0.%d")/ICMP()/("X"*480)' %(i, i+10) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_l3_all_nvgre_frag_icmp = {
-    "name":"tv_mac_ipv4_l3_all_nvgre_frag_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src="192.168.0.%d", dst="192.168.0.%d")/ICMP()/("X"*480)' %(i, i+10) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_l3_src_nvgre_frag_icmp = {
-    "name":"tv_mac_ipv4_l3_src_nvgre_frag_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src="192.168.0.%d", frag=5)/ICMP()/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_l3_dst_nvgre_frag_icmp = {
-    "name":"tv_mac_ipv4_l3_dst_nvgre_frag_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.%d", frag=5)/ICMP()/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+from test_case import TestCase
+from rte_flow_common import RssProcessing
+
+# toeplitz related data start
+mac_ipv4_toeplitz_basic_pkt = {
+    'ipv4-nonfrag': [
+       'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+    ],
+    'ipv4-frag': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2", frag=6)/("X"*480)',
+    ],
+    'ipv4-icmp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)',
+    ],
+    'ipv4-tcp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+    ],
+    'ipv4-udp-vxlan': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
-tv_mac_ipv4_l3_src_vxlan_frag_icmp = {
-    "name":"tv_mac_ipv4_l3_src_vxlan_frag_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end",    
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.%d",frag=5)/ICMP()/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_udp_toeplitz_basic_pkt = {
+    'ipv4-udp': [
+       'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
+    'nvgre': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
-tv_mac_ipv4_l3_dst_vxlan_frag_icmp = {
-    "name":"tv_mac_ipv4_l3_dst_vxlan_frag_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.%d",frag=5)/ICMP()/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_udp_toeplitz_non_basic_pkt = [
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+    ]
+
+mac_ipv4_tcp_toeplitz_basic_pkt = {
+    'ipv4-tcp': [
+       'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+    ],
+    'nvgre': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
-tv_mac_ipv4_l3_all_vxlan_frag_icmp = {
-    "name":"tv_mac_ipv4_l3_all_vxlan_frag_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.%d", dst="192.168.0.%d", frag=5)/ICMP()/("X"*480)' %(i, i+10) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_tcp_toeplitz_non_basic_pkt = [
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)'
+    ]
+
+mac_ipv4_sctp_toeplitz_basic_pkt = {
+    'ipv4-sctp': [
+       'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+    ],
+    'nvgre': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
-tv_mac_ipv6_l3_src = {
-    "name":"tv_mac_ipv6_l3_src",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="2001::%d")/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_sctp_toeplitz_non_basic_pkt = [
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+    ]
+
+mac_ipv6_toeplitz_basic_pkt = {
+    'ipv6-nonfrag': [
+       'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+    ],
+    'ipv6-frag': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+    ],
+    'ipv6-icmp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+    ],
+    'ipv6-udp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
+    'nvgre': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+    ],
 }
 
-tv_mac_ipv6_l3_src_frag = {
-    "name":"tv_mac_ipv6_l3_src_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="2001::%d")/IPv6ExtHdrFragment()/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv6_toeplitz_non_basic_pkt = [
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+    ]
+
+mac_ipv6_udp_toeplitz_basic_pkt = {
+    'ipv6-udp': [
+       'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
+    'ipv4_udp_vxlan_ipv6_udp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
-tv_mac_ipv6_l3_dst_frag = {
-    "name":"tv_mac_ipv6_l3_dst_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6(dst="2001::%d")/IPv6ExtHdrFragment()/("X"*480)' %i for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv6_udp_toeplitz_non_basic_pkt = [
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(src="192.168.0.1",dst="192.168.0.2")/UDP(sport=22,dport=23)/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+    ]
+
+mac_ipv6_tcp_toeplitz_basic_pkt = {
+    'ipv6-tcp': [
+       'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+    ],
+    'ipv4_tcp_vxlan_ipv6_tcp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
-tv_mac_ipv6_l3_all_frag_icmp = {
-    "name":"tv_mac_ipv6_l3_all_frag_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="2001::%d", dst="2001::%d")/IPv6ExtHdrFragment()/ICMP()/("X"*480)' %(i, i+10) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv6_tcp_toeplitz_non_basic_pkt = [
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(src="192.168.0.1",dst="192.168.0.2")/TCP(sport=22,dport=23)/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+    ]
+
+mac_ipv6_sctp_toeplitz_basic_pkt = {
+    'ipv6-sctp': [
+       'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+    ],
+    'ipv4_sctp_vxlan_ipv6_sctp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
-tv_mac_ipv4_udp_l3src_l4dst = {
-    "name":"tv_mac_ipv4_udp_l3src_l4dst",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.%d")/UDP(dport=%d)/("X"*480)' %(i, i+10) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv6_sctp_toeplitz_non_basic_pkt = [
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(src="192.168.0.1",dst="192.168.0.2")/SCTP(sport=22,dport=23)/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+    ]
+
+mac_ipv4_l2src_changed = {
+    'ipv4-nonfrag': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+    ],
+    'ipv4-frag': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2", frag=6)/("X"*480)',
+    ],
+    'ipv4-icmp': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)',
+    ],
+    'ipv4-tcp': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+    ],
+    'ipv4-udp-vxlan': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
-tv_mac_ipv4_udp_all_frag = {
-    "name":"tv_mac_ipv4_udp_all_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.%d", dst="192.168.0.%d")/UDP(sport=%d, dport=%d)/("X"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_l2dst_changed = {
+    'ipv4-nonfrag': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+    ],
+    'ipv4-frag': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2", frag=6)/("X"*480)',
+    ],
+    'ipv4-icmp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)',
+    ],
+    'ipv4-tcp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+    ],
+    'ipv4-udp-vxlan': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
-tv_mac_ipv4_udp_nvgre = {
-    "name":"tv_mac_ipv4_udp_nvgre",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src="192.168.0.%d", dst="192.168.0.%d")/UDP(sport=%d, dport=%d)/("X"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_l3src_changed = {
+    'ipv4-nonfrag': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/("X"*480)',
+    ],
+    'ipv4-frag': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2", frag=6)/("X"*480)',
+    ],
+    'ipv4-icmp': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/ICMP()/("X"*480)',
+    ],
+    'ipv4-tcp': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)',
+    ],
+    'ipv4-udp-vxlan': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
-tv_mac_ipv4_udp_vxlan= {
-    "name":"tv_mac_ipv4_udp_vxlan",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end",    
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.%d", dst="192.168.0.%d")/UDP(sport=%d, dport=%d)/("X"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_l3dst_changed = {
+    'ipv4-nonfrag': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/("X"*480)',
+    ],
+    'ipv4-frag': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2", frag=6)/("X"*480)',
+    ],
+    'ipv4-icmp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/ICMP()/("X"*480)',
+    ],
+    'ipv4-tcp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+    ],
+    'ipv4-udp-vxlan': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
-tv_mac_ipv6_udp_all= {
-    "name":"tv_mac_ipv6_udp_all",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="2001::%d")/UDP(sport=%d, dport=%d)/("X"*480)' %(i, i+10, i+50) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv6_l2src_changed = {
+    'ipv6-nonfrag': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+    ],
+    'ipv6-frag': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+    ],
+    'ipv6-icmp': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+    ],
+    'ipv6-udp': [
+        'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
 }
 
+mac_ipv6_l2dst_changed = {
+    'ipv6-nonfrag': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/("X"*480)',
+    ],
+    'ipv6-frag': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/("X"*480)',
+    ],
+    'ipv6-icmp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/ICMP()/("X"*480)',
+    ],
+    'ipv6-udp': [
+        'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=99)/("X"*480)',
+    ],
+}
 
-tv_mac_ipv6_udp_all_frag= {
-    "name":"tv_mac_ipv6_udp_all_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="2001::%d")/IPv6ExtHdrFragment()/UDP(sport=%d, dport=%d)/("X"*480)' %(i, i+10, i+50) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+#mac_ipv4
+mac_ipv4_l2_src = {
+    'sub_casename': 'mac_ipv4_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-nonfrag'],
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-frag'],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-frag'],
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-icmp'],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-icmp'],
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],
+            'action': {'save_hash': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},
+        }
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],
+                ],
+            'action': 'check_no_hash',
+        },
+    ],
 }
 
-tv_mac_ipv4_tcp_l3src_l4dst= {
-    "name":"tv_mac_ipv4_tcp_l3src_l4dst",
-    "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",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.%d")/TCP(dport=%d)/("X"*480)' %(i, i+10) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_l2_dst = {
+    'sub_casename': 'mac_ipv4_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-nonfrag'],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-nonfrag'],
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-frag'],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-frag'],
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-icmp'],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-icmp'],
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],
+            'action': {'save_hash': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},
+        }
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],
+            ],
+            'action': {'check_no_hash': ''},
+        },
+    ],
 }
 
-tv_mac_ipv4_tcp_l3dst_l4src= {
-    "name":"tv_mac_ipv4_tcp_l3dst_l4src",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.%d")/TCP(sport=%d)/("X"*480)' %(i, i+10) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_l2src_l2dst = {
+    'sub_casename': 'mac_ipv4_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-nonfrag'],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-nonfrag'],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-frag'],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-frag'],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5",frag=7)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-icmp'],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-icmp'],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/ICMP()/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],
+            'action': {'save_hash': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l2dst_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l2src_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=23,dport=25)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},
+        }
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],
+            ],
+            'action': {'check_no_hash': ''},
+        },
+    ],
 }
 
-tv_mac_ipv4_tcp_all= {
-    "name":"tv_mac_ipv4_tcp_all",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.%d",dst="192.168.0.%d")/TCP(sport=%d,dport=%d)/("X"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_l3_src = {
+    'sub_casename': 'mac_ipv4_l3src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-nonfrag'],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-nonfrag'],
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-frag'],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-frag'],
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-icmp'],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-icmp'],
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],
+            'action': {'save_hash': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},
+        }
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],
+            ],
+            'action': {'check_no_hash': ''},
+        },
+    ],
 }
 
-tv_mac_ipv4_tcp_all_nvgre_frag= {
-    "name":"tv_mac_ipv4_tcp_all_nvgre_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src="192.168.0.%d", dst="192.168.0.%d")/TCP(sport=%d, dport=%d)/("X"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_l3_dst = {
+    'sub_casename': 'mac_ipv4_l3dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-nonfrag'],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-nonfrag'],
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-frag'],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-frag'],
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-icmp'],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-icmp'],
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],
+            'action': {'save_hash': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},
+        }
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],
+            ],
+            'action': {'check_no_hash': ''},
+        },
+    ],
 }
 
-tv_mac_ipv4_tcp_all_vxlan_frag= {
-    "name":"tv_mac_ipv4_tcp_all_vxlan_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.%d", dst="192.168.0.%d")/TCP(sport=%d, dport=%d)/("X"*480)' %(i, i+10, i+50,i+55) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_all = {
+    'sub_casename': 'mac_ipv4_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-nonfrag'],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-nonfrag'],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-frag'],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-frag'],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-icmp'],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-icmp'],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],
+            'action': {'save_hash': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l3dst_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': mac_ipv4_l3src_changed['ipv4-udp-vxlan'],
+            'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp-vxlan'},
+        }
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+                mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],
+            ],
+            'action': {'check_no_hash': ''},
+        },
+    ],
 }
 
-tv_mac_ipv6_tcp_all= {
-    "name":"tv_mac_ipv6_tcp_all",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="2001::%d")/TCP(sport=%d, dport=%d)/("X"*480)' %(i, i+10, i+50) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+#mac ipv4_udp
+mac_ipv4_udp_l2_src = {
+    'sub_casename': 'mac_ipv4_udp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/UDP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
 }
 
-tv_mac_ipv6_tcp_all_frag= {
-    "name":"tv_mac_ipv6_tcp_all_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="2001::%d")/IPv6ExtHdrFragment()/TCP(sport=%d, dport=%d)/("X"*480)' %(i, i+10, i+50) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_udp_l2_dst = {
+    'sub_casename': 'mac_ipv4_udp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/UDP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
 }
 
-tv_mac_ipv4_sctp_l3src_l4dst= {
-    "name":"tv_mac_ipv4_sctp_l3src_l4dst",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp l3-src-only l4-dst-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.%d")/SCTP(dport=%d)/("X"*480)' %(i, i+10) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_udp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv4_udp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/UDP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
 }
 
-tv_mac_ipv4_sctp_all_frag= {
-    "name":"tv_mac_ipv4_sctp_all_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.%d",dst="192.168.0.%d", frag=4)/SCTP(sport=%d,dport=%d)/("X"*480)' %(i, i+10,i+50,i+55) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_udp_l3_src = {
+    'sub_casename': 'mac_ipv4_udp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
 }
 
-tv_mac_ipv4_sctp_nvgre= {
-    "name":"tv_mac_ipv4_sctp_nvgre",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src="192.168.0.%d",dst="192.168.0.%d", frag=4)/SCTP(sport=%d,dport=%d)/("X"*480)' %(i, i+10,i+50,i+55) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_udp_l3_dst = {
+    'sub_casename': 'mac_ipv4_udp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
 }
 
-tv_mac_ipv4_sctp_vxlan= {
-    "name":"tv_mac_ipv4_sctp_vxlan",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.%d",dst="192.168.0.%d")/SCTP(sport=%d,dport=%d)/("X"*480)' %(i, i+10,i+50,i+55) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_udp_l3src_l4src = {
+    'sub_casename': 'mac_ipv4_udp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
 }
 
-tv_mac_ipv6_sctp_all= {
-    "name":"tv_mac_ipv6_sctp_all",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="2001::%d")/SCTP(sport=%d, dport=%d)/("X"*480)' %(i, i+10, i+50) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
+mac_ipv4_udp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv4_udp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
 
-tv_mac_ipv4_pppod_pppoe= {
-    "name":"tv_mac_ipv4_pppod_pppoe",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src="192.168.0.%d")/UDP(sport=%d)/("X"*480)' %(i, i+10,i+50) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_pppoe_all= {
-    "name":"tv_mac_ipv4_pppoe_all",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src="192.168.0.%d",dst="192.168.0.%d")/("X"*480)' %(i, i+10,i+50) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_pppoe_udp= {
-    "name":"tv_mac_ipv4_pppoe_udp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src="192.168.0.%d")/UDP(dport=%d)/("X"*480)' %(i, i+10,i+50) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_pppoe_tcp= {
-    "name":"tv_mac_ipv4_pppoe_tcp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src="192.168.0.%d")/TCP(sport=%d)/("X"*480)' %(i, i+10,i+50) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_pppoe_sctp= {
-    "name":"tv_mac_ipv4_pppoe_sctp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / pppoes / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src="192.168.0.%d")/SCTP(dport=%d)/("X"*480)' %(i, i+10,i+50) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_pppoe_icmp= {
-    "name":"tv_mac_ipv4_pppoe_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/PPPoE(sessionid=%d)/PPP(proto=0x21)/IP(src="192.168.0.%d")/ICMP()/("X"*480)' %(i, i+10) for i in range(0,100)],
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-pkt_str=[]
-pkt = ['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP(dport=2152)/GTP_U_Header(GTP_TEID=0x123456)/IP(src="192.168.0.%d")/ICMP()/("X"*480)' %i for i in range(0,100)]
-for i in pkt:
-    pkt_str.append(i.replace('GTP_TEID', GTP_TEID))
-
-tv_mac_ipv4_gtpu_icmp= {
-    "name":"tv_mac_ipv4_gtpu_icmp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end",
-    "scapy_str":pkt_str,
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-pkt_str=[]
-pkt = ['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP(dport=2152)/GTP_U_Header(GTP_TEID=0x123456)/IP(src="192.168.0.%d", frag=6)/UDP(dport=%d)/("X"*480)' %(i, i+10) for i in range(0,100)]
-for i in pkt:
-    pkt_str.append(i.replace('GTP_TEID', GTP_TEID))
-
-tv_mac_ipv4_gtpu_udp_frag= {
-    "name":"tv_mac_ipv4_gtpu_udp_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end",
-    "scapy_str":pkt_str,
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-pkt_str=[]
-pkt = ['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP(dport=2152)/GTP_U_Header(GTP_TEID=0x123456)/IP(src="192.168.0.%d", frag=6)/("X"*480)' %i for i in range(0,100)]
-for i in pkt:
-    pkt_str.append(i.replace('GTP_TEID', GTP_TEID))
-
-tv_mac_ipv4_gtpu_ipv4_frag= {
-    "name":"tv_mac_ipv4_gtpu_ipv4_frag",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end",
-    "scapy_str":pkt_str,
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-pkt_str=[]
-pkt =['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP(dport=2152)/GTP_U_Header(GTP_TEID=0x123456)/IP(src="192.168.0.%d", frag=6)/TCP(dport=%d)/("X"*480)' %(i, i+10) for i in range(0,100)]
-for i in pkt:
-    pkt_str.append(i.replace('GTP_TEID', GTP_TEID))
-
-tv_mac_ipv4_gtpu_tcp= {
-    "name":"tv_mac_ipv4_gtpu_tcp",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / tcp / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end",
-    "scapy_str":pkt_str,
-    "check_func": rfc.check_packets_of_each_queue,
-    "check_func_param": {"expect_port":0}
+mac_ipv4_udp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv4_udp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
 }
 
-tvs_mac_rss_ipv4 = [
-    tv_mac_ipv4_l3_src_only,
-    tv_mac_ipv4_l3_src_only_frag,
-    tv_mac_ipv4_l3_dst_only,
-    tv_mac_ipv4_l3_all
-    ]
-
-tvs_mac_rss_ipv4_port = [
-    tv_mac_ipv4_l3_src_only_frag_icmp,
-    tv_mac_ipv4_l3_dst_only_frag_icmp,
-    tv_mac_ipv4_l3_all_frag_icmp,
-    tv_mac_ipv4_udp_l3src_l4dst,
-    tv_mac_ipv4_udp_all_frag,
-    tv_mac_ipv4_tcp_l3src_l4dst,
-    tv_mac_ipv4_tcp_l3dst_l4src,
-    tv_mac_ipv4_tcp_all,
-    tv_mac_ipv4_sctp_l3src_l4dst,
-    tv_mac_ipv4_sctp_all_frag
-    ]
+mac_ipv4_udp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv4_udp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
 
-tvs_mac_rss_ipv4_nvgre = [
-    tv_mac_ipv4_l3_all_nvgre_frag_icmp,
-    tv_mac_ipv4_l3_src_nvgre_frag_icmp,
-    tv_mac_ipv4_l3_dst_nvgre_frag_icmp,
-    tv_mac_ipv4_tcp_all_nvgre_frag,
-    tv_mac_ipv4_sctp_nvgre
-    ]
-tvs_mac_rss_ipv4_vxlan =[
-    tv_mac_ipv4_l3_src_vxlan_frag_icmp,
-    tv_mac_ipv4_l3_dst_vxlan_frag_icmp,
-    tv_mac_ipv4_l3_all_vxlan_frag_icmp,
-    tv_mac_ipv4_tcp_all_vxlan_frag,
-    tv_mac_ipv4_sctp_vxlan,
-    tv_mac_ipv4_udp_vxlan
-    ]
+mac_ipv4_udp_l4_src = {
+    'sub_casename': 'mac_ipv4_udp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.1.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.1.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
 
-tvs_mac_rss_ipv6 =[
-    tv_mac_ipv6_l3_src,
-    tv_mac_ipv6_l3_src_frag,
-    tv_mac_ipv6_l3_dst_frag,
-    tv_mac_ipv6_l3_all_frag_icmp,
-    tv_mac_ipv6_udp_all,
-    tv_mac_ipv6_udp_all_frag,
-    tv_mac_ipv6_tcp_all,
-    tv_mac_ipv6_tcp_all_frag,
-    tv_mac_ipv6_sctp_all
-]
-    
-tvs_mac_rss_ipv4_pppoe =[
-    tv_mac_ipv4_pppod_pppoe,
-    tv_mac_ipv4_pppoe_all,
-    tv_mac_ipv4_pppoe_tcp,
-    tv_mac_ipv4_pppoe_sctp,
-    tv_mac_ipv4_pppoe_icmp
-    ]
-tvs_mac_rss_ipv4_gtp =[
-    tv_mac_ipv4_gtpu_icmp,
-    tv_mac_ipv4_gtpu_udp_frag,
-    tv_mac_ipv4_gtpu_ipv4_frag,
-    tv_mac_ipv4_gtpu_tcp
-    ]
+mac_ipv4_udp_l4_dst = {
+    'sub_casename': 'mac_ipv4_udp_l4_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.1.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.1.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
 
-tv_mac_ipv4_symmetric_toeplitz = {
-    "name": "tv_mac_ipv4_symmetric_toeplitz",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2")/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1")/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port": 0}
-}    
-
-tv_mac_ipv4_frag_symmetric_toeplitz= {
-    "name":"tv_mac_ipv4_frag_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/("X"*480)',
-                 'Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_udp_frag_symmetric_toeplitz= {
-    "name":"tv_mac_ipv4_udp_frag_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/UDP(sport=20,dport=22)/("X"*480)',
-                 'Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/UDP(sport=22,dport=20)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_udp_frag_symmetric_toeplitz_all= {
-    "name":"tv_mac_ipv4_udp_frag_symmetric_toeplitz_all",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp l3-src-only l3-dst-only l4-src-only l4-dst-only end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="1.1.4.1",dst="2.2.2.3")/UDP(sport=20,dport=22)/("X"*480)',
-                 'Ether(dst="68:05:ca:a3:28:94")/IP(src="2.2.2.3",dst="1.1.4.1")/UDP(sport=22,dport=20)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_tcp_frag_symmetric_toeplitz= {
-    "name":"tv_mac_ipv4_tcp_frag_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/TCP(sport=20,dport=22)/("X"*480)',
-                 'Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/TCP(sport=22,dport=20)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_sctp_frag_symmetric_toeplitz= {
-    "name":"tv_mac_ipv4_sctp_frag_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss func symmetric_toeplitz types ipv4-sctp end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/SCTP(sport=20,dport=22)/("X"*480)',
-                 'Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/SCTP(sport=22,dport=20)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_icmp_frag_symmetric_toeplitz= {
-    "name":"tv_mac_ipv4_icmp_frag_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/ICMP()/("X"*480)',
-                 'Ether(dst="68:05:ca:a3:28:94")/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/ICMP()/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end",
-    "scapy_str":['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
-                 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_frag_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_frag_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/IPv6ExtHdrFragment()/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_udp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_udp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=30,dport=32)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=30)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_tcp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_tcp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/TCP(sport=30,dport=32)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=30)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_sctp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_sctp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss func symmetric_toeplitz types ipv6-sctp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/SCTP(sport=30,dport=32)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=30)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_icmp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_icmp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/ICMP()/("X"*480)',
-                'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_nvgre_symmetric_toeplitz= {
-    "name":"tv_mac_ipv4_nvgre_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end ",
-    "scapy_str": ['Ether()/IP()/NVGRE()/Ether()/IP(src="192.168.0.8",dst="192.168.0.69",frag=6)/("X"*480)',
-                  'Ether()/IP()/NVGRE()/Ether()/IP(src="192.168.0.69",dst="192.168.0.8",frag=6)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_vxlan_symmetric_toeplitz= {
-    "name":"tv_mac_ipv4_vxlan_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.1",dst="192.168.0.2",frag=6)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IP(src="192.168.0.2",dst="192.168.0.1",frag=6)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_nvgre_udp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv4_nvgre_udp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="8.8.8.1",dst="5.6.8.2")/UDP(sport=20,dport=22)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="5.6.8.2",dst="8.8.8.1")/UDP(sport=22,dport=20)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_nvgre_sctp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv4_nvgre_sctp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss func symmetric_toeplitz types ipv4-sctp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="8.8.8.1",dst="5.6.8.2")/SCTP(sport=20,dport=22)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="5.6.8.2",dst="8.8.8.1")/SCTP(sport=22,dport=20)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_nvgre_tcp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv4_nvgre_tcp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="8.8.8.1",dst="5.6.8.2")/TCP(sport=20,dport=22)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether(dst="68:05:ca:a3:28:94")/IP(src="5.6.8.2",dst="8.8.8.1")/TCP(sport=22,dport=20)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_nvgre_icmp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv4_nvgre_icmp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src="8.8.8.1",dst="5.6.8.2")/ICMP()/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IP(src="5.6.8.2",dst="8.8.8.1")/ICMP()/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_nvgre_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_nvgre_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_nvgre_udp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_nvgre_udp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=30,dport=32)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=30)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_nvgre_tcp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_nvgre_tcp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/TCP(sport=30,dport=32)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=30)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_nvgre_sctp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_nvgre_sctp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss func symmetric_toeplitz types ipv6-sctp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/SCTP(sport=30,dport=32)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=30)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_nvgre_icmp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_nvgre_icmp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/ICMP()/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_vxlan_udp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_vxlan_udp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / udp / end actions rss func symmetric_toeplitz types ipv6-udp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=30,dport=32)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=30)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_vxlan_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_vxlan_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IP()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_vxlan_tcp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_vxlan_tcp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/TCP(sport=30,dport=32)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=30)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_vxlan_sctp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_vxlan_sctp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss func symmetric_toeplitz types ipv6-sctp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/SCTP(sport=30,dport=32)/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=30)/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_vxlan_icmp_symmetric_toeplitz= {
-    "name":"tv_mac_ipv6_vxlan_icmp_symmetric_toeplitz",
-    "rte_flow_pattern":"flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/ICMP()/("X"*480)',
-                  'Ether(dst="68:05:ca:a3:28:94")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)'],
-    "check_func": rfc.check_symmetric_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv4_simple_xor= {
-    "name":"tv_mac_ipv4_simple_xor",
-    "rte_flow_pattern":"flow create 0 ingress pattern end actions rss func simple_xor key_len 0 queues end / end",
-    "scapy_str": ['Ether()/IP(src="1.1.4.1",dst="2.2.2.3")/("X"*480)',
-                  'Ether()/IP(src="2.2.2.3",dst="1.1.4.1")/("X"*480)'],
-    "check_func": rfc.check_simplexor_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tv_mac_ipv6_simple_xor= {
-    "name":"tv_mac_ipv6_sctp_simple_xor",
-    "rte_flow_pattern":"flow create 0 ingress pattern end actions rss func simple_xor key_len 0 queues end / end",
-    "scapy_str": ['Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/ICMP()/("X"*480)',
-                  'Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)'],
-    "check_func": rfc.check_simplexor_queue,
-    "check_func_param": {"expect_port":0}
-}
-
-tvs_mac_rss_ipv4_symmetric_toeplitz = [
-    tv_mac_ipv4_symmetric_toeplitz,
-    tv_mac_ipv4_frag_symmetric_toeplitz,
-    tv_mac_ipv4_udp_frag_symmetric_toeplitz,
-    tv_mac_ipv4_udp_frag_symmetric_toeplitz_all,
-    tv_mac_ipv4_tcp_frag_symmetric_toeplitz,
-    tv_mac_ipv4_sctp_frag_symmetric_toeplitz,
-    tv_mac_ipv4_icmp_frag_symmetric_toeplitz
-    ]
+mac_ipv4_udp_all = {
+    'sub_casename': 'mac_ipv4_udp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'][0],
+                mac_ipv4_udp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
 
-tvs_mac_rss_ipv6_symmetric_toeplitz = [
-    tv_mac_ipv6_symmetric_toeplitz,
-    tv_mac_ipv6_frag_symmetric_toeplitz,
-    tv_mac_ipv6_udp_symmetric_toeplitz,
-    tv_mac_ipv6_tcp_symmetric_toeplitz,
-    tv_mac_ipv6_sctp_symmetric_toeplitz,
-    tv_mac_ipv6_icmp_symmetric_toeplitz
-    ]
+#mac ipv4_tcp
+mac_ipv4_tcp_l2_src = {
+    'sub_casename': 'mac_ipv4_tcp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
 
-tvs_mac_rss_ipv4_symmetric_toeplitz_nvgre = [
-    tv_mac_ipv4_nvgre_symmetric_toeplitz,
-    tv_mac_ipv4_nvgre_udp_symmetric_toeplitz,
-    tv_mac_ipv4_nvgre_sctp_symmetric_toeplitz,
-    tv_mac_ipv4_nvgre_tcp_symmetric_toeplitz,
-    tv_mac_ipv4_nvgre_icmp_symmetric_toeplitz
-    ]
+mac_ipv4_tcp_l2_dst = {
+    'sub_casename': 'mac_ipv4_tcp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
 
-tvs_mac_rss_ipv6_symmetric_toeplitz_nvgre = [
-    tv_mac_ipv6_nvgre_symmetric_toeplitz,
-    tv_mac_ipv6_nvgre_udp_symmetric_toeplitz,
-    tv_mac_ipv6_nvgre_tcp_symmetric_toeplitz,
-    tv_mac_ipv6_nvgre_sctp_symmetric_toeplitz,
-    tv_mac_ipv6_nvgre_icmp_symmetric_toeplitz
-    ]
+mac_ipv4_tcp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv4_tcp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
 
-tvs_mac_rss_symmetric_toeplitz_vxlan = [
-    tv_mac_ipv4_vxlan_symmetric_toeplitz,
-    tv_mac_ipv6_vxlan_udp_symmetric_toeplitz,
-    tv_mac_ipv6_vxlan_symmetric_toeplitz,
-    tv_mac_ipv6_vxlan_tcp_symmetric_toeplitz,
-    tv_mac_ipv6_vxlan_icmp_symmetric_toeplitz
-    ]
+mac_ipv4_tcp_l3_src = {
+    'sub_casename': 'mac_ipv4_tcp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
 
-tvs_mac_rss_simple_xor = [
-    tv_mac_ipv4_simple_xor,
-    tv_mac_ipv6_simple_xor
-    ]
+mac_ipv4_tcp_l3_dst = {
+    'sub_casename': 'mac_ipv4_tcp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_tcp_l3src_l4src = {
+    'sub_casename': 'mac_ipv4_tcp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_tcp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv4_tcp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_tcp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv4_tcp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_tcp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv4_tcp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_tcp_l4_src = {
+    'sub_casename': 'mac_ipv4_tcp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.1.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.1.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_tcp_l4_dst = {
+    'sub_casename': 'mac_ipv4_tcp_l4_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.1.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.1.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_tcp_all = {
+    'sub_casename': 'mac_ipv4_tcp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'][0],
+                mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+#mac ipv4_sctp
+mac_ipv4_sctp_l2_src = {
+    'sub_casename': 'mac_ipv4_sctp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/SCTP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_sctp_l2_dst = {
+    'sub_casename': 'mac_ipv4_sctp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/SCTP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_sctp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv4_sctp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/SCTP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_sctp_l3_src = {
+    'sub_casename': 'mac_ipv4_sctp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_sctp_l3_dst = {
+    'sub_casename': 'mac_ipv4_sctp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_sctp_l3src_l4src = {
+    'sub_casename': 'mac_ipv4_sctp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_sctp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv4_sctp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_sctp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv4_sctp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_sctp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv4_sctp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_sctp_l4_src = {
+    'sub_casename': 'mac_ipv4_sctp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.1.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.1.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_sctp_l4_dst = {
+    'sub_casename': 'mac_ipv4_sctp_l4_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.1.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.1.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_sctp_all = {
+    'sub_casename': 'mac_ipv4_sctp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.1.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'][0],
+                mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+#mac_ipv6
+mac_ipv6_l2_src = {
+    'sub_casename': 'mac_ipv6_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/ICMP()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=99)/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_l2_dst = {
+    'sub_casename': 'mac_ipv6_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/ICMP()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(sport=25,dport=99)/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+            ],
+            'action': {'check_no_hash': ''},
+        },
+    ],
+}
+
+mac_ipv6_l2src_l2dst = {
+    'sub_casename': 'mac_ipv6_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/ICMP()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=99)/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+            ],
+            'action': {'check_no_hash': ''},
+        },
+    ],
+}
+
+mac_ipv6_l3_src = {
+    'sub_casename': 'mac_ipv6_l3src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/ICMP()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=33)/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'],
+            'action': {'save_hash': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_different': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)',
+            'action': {'check_hash_same': 'nvgre'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': {'check_no_hash': ''},
+        },
+    ],
+}
+
+mac_ipv6_l3_dst = {
+    'sub_casename': 'mac_ipv6_l3dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=33)/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'],
+            'action': {'save_hash': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)',
+            'action': {'check_hash_different': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_same': 'nvgre'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_toeplitz_basic_pkt['nvgre'][0],
+            ],
+            'action': {'check_no_hash': ''},
+        },
+    ],
+}
+
+mac_ipv6_all = {
+    'sub_casename': 'mac_ipv6_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=33)/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'],
+            'action': {'save_hash': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)',
+            'action': {'check_hash_different': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_different': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_same': 'nvgre'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+                mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_toeplitz_basic_pkt['nvgre'][0]
+            ],
+            'action': {'check_no_hash': ''},
+        },
+    ],
+}
+
+#mac_ipv6_udp
+mac_ipv6_udp_l2_src = {
+    'sub_casename': 'mac_ipv6_udp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_l2_dst = {
+    'sub_casename': 'mac_ipv6_udp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv6_udp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/UDP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_l3_src = {
+    'sub_casename': 'mac_ipv6_udp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_l3_dst = {
+    'sub_casename': 'mac_ipv6_udp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_l3src_l4src = {
+    'sub_casename': 'mac_ipv6_udp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv6_udp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv6_udp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv6_udp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_l4_src = {
+    'sub_casename': 'mac_ipv6_udp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_l4_dst = {
+    'sub_casename': 'mac_ipv6_udp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_all = {
+    'sub_casename': 'mac_ipv6_udp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'][0],
+                mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+#mac_ipv6_tcp
+mac_ipv6_tcp_l2_src = {
+    'sub_casename': 'mac_ipv6_tcp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/TCP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_tcp_l2_dst = {
+    'sub_casename': 'mac_ipv6_tcp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/TCP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_tcp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv6_tcp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/TCP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_tcp_l3_src = {
+    'sub_casename': 'mac_ipv6_tcp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_tcp_l3_dst = {
+    'sub_casename': 'mac_ipv6_tcp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
 
+mac_ipv6_tcp_l3src_l4src = {
+    'sub_casename': 'mac_ipv6_tcp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_tcp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv6_tcp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_tcp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv6_tcp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_tcp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv6_tcp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_tcp_l4_src = {
+    'sub_casename': 'mac_ipv6_tcp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_tcp_l4_dst = {
+    'sub_casename': 'mac_ipv6_tcp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_tcp_all = {
+    'sub_casename': 'mac_ipv6_tcp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'][0],
+                mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+#mac_ipv6_sctp
+mac_ipv6_sctp_l2_src = {
+    'sub_casename': 'mac_ipv6_sctp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/SCTP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_sctp_l2_dst = {
+    'sub_casename': 'mac_ipv6_sctp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/SCTP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_sctp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv6_sctp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")/SCTP(sport=25,dport=99)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_sctp_l3_src = {
+    'sub_casename': 'mac_ipv6_sctp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_sctp_l3_dst = {
+    'sub_casename': 'mac_ipv6_sctp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_sctp_l3src_l4src = {
+    'sub_casename': 'mac_ipv6_sctp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_sctp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv6_sctp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_sctp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv6_sctp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_sctp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv6_sctp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_sctp_l4_src = {
+    'sub_casename': 'mac_ipv6_sctp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_sctp_l4_dst = {
+    'sub_casename': 'mac_ipv6_sctp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_sctp_all = {
+    'sub_casename': 'mac_ipv6_sctp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=32,dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=33)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_non_basic_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'][0],
+                mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'][0],
+            ],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+# toeplitz related data end
+
+mac_ipv4_1 = [mac_ipv4_l2_src, mac_ipv4_l2_dst, mac_ipv4_l2src_l2dst]
+mac_ipv4_2 = [mac_ipv4_l3_src, mac_ipv4_l3_dst, mac_ipv4_all]
+
+mac_ipv4_udp = [mac_ipv4_udp_l2_src, mac_ipv4_udp_l2_dst, mac_ipv4_udp_l2src_l2dst,
+                mac_ipv4_udp_l3_src, mac_ipv4_udp_l3_dst, mac_ipv4_udp_l3src_l4src,
+                mac_ipv4_udp_l3src_l4dst, mac_ipv4_udp_l3dst_l4src, mac_ipv4_udp_l3dst_l4dst,
+                mac_ipv4_udp_l4_src, mac_ipv4_udp_l4_dst, mac_ipv4_udp_all]
+
+mac_ipv4_tcp = [mac_ipv4_tcp_l2_src, mac_ipv4_tcp_l2_dst, mac_ipv4_tcp_l2src_l2dst,
+                mac_ipv4_tcp_l3_src, mac_ipv4_tcp_l3_dst, mac_ipv4_tcp_l3src_l4src,
+                mac_ipv4_tcp_l3src_l4dst, mac_ipv4_tcp_l3dst_l4src, mac_ipv4_tcp_l3dst_l4dst,
+                mac_ipv4_tcp_l4_src, mac_ipv4_tcp_l4_dst, mac_ipv4_tcp_all]
+
+mac_ipv4_sctp = [mac_ipv4_sctp_l2_src, mac_ipv4_sctp_l2_dst, mac_ipv4_sctp_l2src_l2dst,
+                mac_ipv4_sctp_l3_src, mac_ipv4_sctp_l3_dst, mac_ipv4_sctp_l3src_l4src,
+                mac_ipv4_sctp_l3src_l4dst, mac_ipv4_sctp_l3dst_l4src, mac_ipv4_sctp_l3dst_l4dst,
+                mac_ipv4_sctp_l4_src, mac_ipv4_sctp_l4_dst, mac_ipv4_sctp_all]
+
+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]
+
+mac_ipv6_udp = [mac_ipv6_udp_l2_src, mac_ipv6_udp_l2_dst, mac_ipv6_udp_l2src_l2dst,
+                mac_ipv6_udp_l3_src, mac_ipv6_udp_l3_dst, mac_ipv6_udp_l3src_l4src,
+                mac_ipv6_udp_l3src_l4dst, mac_ipv6_udp_l3dst_l4src, mac_ipv6_udp_l3dst_l4dst,
+                mac_ipv6_udp_l4_src, mac_ipv6_udp_l4_dst, mac_ipv6_udp_all]
+
+mac_ipv6_tcp = [mac_ipv6_tcp_l2_src, mac_ipv6_tcp_l2_dst, mac_ipv6_tcp_l2src_l2dst,
+                mac_ipv6_tcp_l3_src, mac_ipv6_tcp_l3_dst, mac_ipv6_tcp_l3src_l4src,
+                mac_ipv6_tcp_l3src_l4dst, mac_ipv6_tcp_l3dst_l4src, mac_ipv6_tcp_l3dst_l4dst,
+                mac_ipv6_tcp_l4_src, mac_ipv6_tcp_l4_dst, mac_ipv6_tcp_all]
+
+mac_ipv6_sctp = [mac_ipv6_sctp_l2_src, mac_ipv6_sctp_l2_dst, mac_ipv6_sctp_l2src_l2dst,
+                mac_ipv6_sctp_l3_src, mac_ipv6_sctp_l3_dst, mac_ipv6_sctp_l3src_l4src,
+                mac_ipv6_sctp_l3src_l4dst, mac_ipv6_sctp_l3dst_l4src, mac_ipv6_sctp_l3dst_l4dst,
+                mac_ipv6_sctp_l4_src, mac_ipv6_sctp_l4_dst, mac_ipv6_sctp_all]
+
+# symmetric related data start
+mac_ipv4_symmetric = {
+    'sub_casename': 'mac_ipv4_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',
+    'pre-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+            'action': {'save_hash': 'ipv4-nonfrag-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-nonfrag-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)',
+            'action': {'save_hash': 'ipv4-frag-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1",frag=6)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-frag-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)',
+            'action': {'save_hash': 'ipv4-icmp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-icmp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-vlan-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-vlan-pre'},
+        },
+    ],
+    'test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)',
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1",frag=6)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)',
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/ICMP()/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+           'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+           'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+           'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)',
+           'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        {
+           'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+           'action': {'save_hash': 'ipv4-udp-vlan'},
+        },
+        {
+           'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+           'action': {'check_hash_same': 'ipv4-udp-vlan'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'save_hash': 'ipv6'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2928")/("X"*480)',
+            'action': {'check_hash_different': 'ipv6'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+            'action': {'save_or_no_hash': 'ipv4-nonfrag-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-nonfrag-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2",frag=6)/("X"*480)',
+            'action': {'save_or_no_hash': 'ipv4-frag-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1",frag=6)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-frag-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/ICMP()/("X"*480)',
+            'action': {'save_or_no_hash': 'ipv4-icmp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/ICMP()/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-icmp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_or_no_hash': 'ipv4-tcp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_or_no_hash': 'ipv4-udp-vlan-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-udp-vlan-post'},
+        },
+    ],
+}
+
+mac_ipv4_udp_symmetric = {
+    'sub_casename': 'mac_ipv4_udp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'nvgre-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'nvgre-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'nvgre-pre'},
+        },
+    ],
+    'test': [
+		{
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'nvgre'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-udp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-udp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'nvgre-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'nvgre-post'},
+        },
+    ],
+}
+
+mac_ipv4_tcp_symmetric = {
+    'sub_casename': 'mac_ipv4_tcp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},
+        },
+    ],
+    'test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-tcp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},
+        },
+    ],
+}
+
+mac_ipv4_sctp_symmetric = {
+    'sub_casename': 'mac_ipv4_sctp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-sctp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-sctp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-sctp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-sctp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},
+        },
+    ],
+    'test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-sctp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-sctp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-sctp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.1", src="192.168.0.2")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IP(dst="192.168.0.2", src="192.168.0.1")/SCTP(sport=23,dport=22)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},
+        },
+    ],
+}
+
+mac_ipv6_symmetric = {
+    'sub_casename': 'mac_ipv6_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end',
+    'pre-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'save_hash': 'ipv6-nonfrag-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-nonfrag-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'save_hash': 'ipv6-frag-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-frag-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'save_hash': 'ipv6-icmp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-icmp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-udp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv6-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv6-pre'},
+        },
+    ],
+    'test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv6'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv6'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/("X"*480)',
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'save_or_no_hash': 'ipv6-nonfrag-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv6-nonfrag-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'save_or_no_hash': 'ipv6-frag-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv6-frag-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'save_or_no_hash': 'ipv6-icmp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv6-icmp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_or_no_hash': 'ipv6-udp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv6-udp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'save_or_no_hash': 'ipv4-udp-vxlan-eth-ipv6-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/UDP()/VXLAN()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv6-post'},
+        },
+    ],
+}
+
+mac_ipv6_udp_symmetric = {
+    'sub_casename': 'mac_ipv6_udp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-udp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-eth-ipv6-udp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'nvgre-eth-ipv6-udp-pre'},
+        },
+    ],
+    'test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-eth-ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'nvgre-eth-ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-eth-ipv6-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'nvgre-eth-ipv6-tcp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-udp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv6-udp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-eth-ipv6-udp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'nvgre-eth-ipv6-udp-post'},
+        },
+    ],
+}
+
+mac_ipv6_tcp_symmetric = {
+    'sub_casename': 'mac_ipv6_tcp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-eth-ipv6-tcp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'nvgre-eth-ipv6-tcp-pre'},
+        },
+    ],
+    'test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-eth-ipv6-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'nvgre-eth-ipv6-tcp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-eth-ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'nvgre-eth-ipv6-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-tcp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv6-tcp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-eth-ipv6-tcp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'nvgre-eth-ipv6-tcp-post'},
+        },
+    ],
+}
+
+mac_ipv6_sctp_symmetric = {
+    'sub_casename': 'mac_ipv6_sctp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-sctp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-sctp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-eth-ipv6-sctp-pre'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'nvgre-eth-ipv6-sctp-pre'},
+        },
+    ],
+    'test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-eth-ipv6-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_same': 'nvgre-eth-ipv6-sctp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'ipv6-sctp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'ipv6-sctp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'save_hash': 'nvgre-eth-ipv6-sctp-post'},
+        },
+        {
+            'send_packet': 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP()/NVGRE()/Ether()/IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")/SCTP(sport=22,dport=23)/("X"*480)',
+            'action': {'check_no_hash_or_different': 'nvgre-eth-ipv6-sctp-post'},
+        },
+    ],
+}
+# symmetric related data end
+
+mac_l3_address_switched = {
+    'sub_casename': 'mac_l3_address_switched',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern end actions rss func simple_xor key_len 0 queues end / end',
+    'pre-test': [
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.2", src="192.168.0.1")/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22, dport=23)/("X"*480)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22, dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X" * 80)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X" * 80)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=22, dport=23)/("X" * 80)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22, dport=23)/("X" * 80)',
+            'action': 'check_hash_different',
+        },
+    ],
+    'test': [
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.2", src="192.168.0.1")/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22, dport=23)/("X"*480)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22, dport=23)/("X"*480)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X" * 80)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X" * 80)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=22, dport=23)/("X" * 80)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22, dport=23)/("X" * 80)',
+            'action': 'check_hash_same',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.2", src="192.168.0.1")/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22, dport=23)/("X"*480)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22, dport=23)/("X"*480)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/("X" * 80)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X" * 80)',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst="ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=22, dport=23)/("X" * 80)',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:ca:a3:28:94")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22, dport=23)/("X" * 80)',
+            'action': 'check_hash_different',
+        },
+    ],
+}
 
-test_results = OrderedDict()
+mac_global_simple_xor = [mac_l3_address_switched]
+
+ipv6_32bit_prefix_l3_src_only = {
+    'sub_casename': 'ipv6_32bit_prefix_l3_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre32 l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'save_hash': 'ipv6-32bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe83:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-32bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:b6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-32bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/UDP(sport=1234, dport=5678)/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-32bit'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_no_hash_or_different': 'ipv6-32bit'},
+        },
+    ],
+}
+
+ipv6_32bit_prefix_l3_dst_only = {
+    'sub_casename': 'ipv6_32bit_prefix_l3_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre32 l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'save_hash': 'ipv6-32bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe83:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-32bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:b6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-32bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/UDP(sport=1234, dport=5678)/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-32bit'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81::a6bf:1ff:fe1c:806", dst="fe82::a6bf:1ff:fe1c:806")/Raw("x"*64)',
+            'action': {'check_no_hash_or_different': 'ipv6-32bit'},
+        },
+    ],
+}
+
+ipv6_32bit_prefix_l3_src_dst_only = {
+    'sub_casename': 'ipv6_32bit_prefix_l3_src_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre32 l3-src-only l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'save_hash': 'ipv6-32bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe83:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-32bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe83:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-32bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:b6bf:1ff:fe1c::806", dst="fe82:1:b6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-32bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/UDP(sport=1234, dport=5678)/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-32bit'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81::a6bf:1ff:fe1c:806", dst="fe82::a6bf:1ff:fe1c:806")/Raw("x"*64)',
+            'action': {'check_no_hash_or_different': 'ipv6-32bit'},
+        },
+    ],
+}
+
+ipv6_32bit_prefix = [ipv6_32bit_prefix_l3_src_only, ipv6_32bit_prefix_l3_dst_only, ipv6_32bit_prefix_l3_src_dst_only]
+
+ipv6_48bit_prefix_l3_src_only = {
+    'sub_casename': 'ipv6_48bit_prefix_l3_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre48 l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'save_hash': 'ipv6-48bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:b6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-48bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:2ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-48bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/UDP(sport=1234, dport=5678)/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-48bit'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_no_hash_or_different': 'ipv6-48bit'},
+        },
+    ],
+}
+
+ipv6_48bit_prefix_l3_dst_only = {
+    'sub_casename': 'ipv6_48bit_prefix_l3_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre48 l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'save_hash': 'ipv6-48bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe83:1:b6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-48bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:2ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-48bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/UDP(sport=1234, dport=5678)/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-48bit'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_no_hash_or_different': 'ipv6-48bit'},
+        },
+    ],
+}
+
+ipv6_48bit_prefix_l3_src_dst_only = {
+    'sub_casename': 'ipv6_48bit_prefix_l3_src_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-pre48 l3-src-only l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'save_hash': 'ipv6-48bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:b6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-48bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:b6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-48bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:2ff:fe1c::806", dst="fe82:1:a6bf:2ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-48bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/UDP(sport=1234, dport=5678)/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-48bit'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81::a6bf:1ff:fe1c:806", dst="fe82::a6bf:1ff:fe1c:806")/Raw("x"*64)',
+            'action': {'check_no_hash_or_different': 'ipv6-48bit'},
+        },
+    ],
+}
+
+ipv6_48bit_prefix = [ipv6_48bit_prefix_l3_src_only, ipv6_48bit_prefix_l3_dst_only, ipv6_48bit_prefix_l3_src_dst_only]
+
+ipv6_64bit_prefix_l3_src_only = {
+    'sub_casename': 'ipv6_64bit_prefix_l3_src_only',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'save_hash': 'ipv6-64bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe83:1:a6bf:2ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-64bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:ee1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/UDP(sport=1234, dport=5678)/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_no_hash_or_different': 'ipv6-64bit'},
+        },
+    ],
+}
+
+ipv6_64bit_prefix_l3_dst_only = {
+    'sub_casename': 'ipv6_64bit_prefix_l3_dst_only',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'save_hash': 'ipv6-64bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe83:1:a6bf:2ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-64bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:ee1c::806")/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/UDP(sport=1234, dport=5678)/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_no_hash_or_different': 'ipv6-64bit'},
+        },
+    ],
+}
+
+ipv6_64bit_prefix_l3_src_dst_only = {
+    'sub_casename': 'ipv6_64bit_prefix_l3_src_dst_only',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'save_hash': 'ipv6-64bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:2ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-64bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:2ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_hash_different': 'ipv6-64bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:ee1c::806", dst="fe82:1:a6bf:1ff:ee1c::806")/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/UDP(sport=1234, dport=5678)/Raw("x"*64)',
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': 'Ether(dst="68:05:CA:BB:26:E0")/IPv6(src="fe81:1:a6bf:1ff:fe1c::806", dst="fe82:1:a6bf:1ff:fe1c::806")/Raw("x"*64)',
+            'action': {'check_no_hash_or_different': 'ipv6-64bit'},
+        },
+    ],
+}
+
+ipv6_64bit_prefix = [ipv6_64bit_prefix_l3_src_only, ipv6_64bit_prefix_l3_dst_only, ipv6_64bit_prefix_l3_src_dst_only]
 
 class AdvancedRSSTest(TestCase):
 
     def set_up_all(self):
         """
         Run at the start of each test suite.
-        Generic filter Prerequistites
+        prerequisites.
         """
+        # Based on h/w type, choose how many ports to use
         self.dut_ports = self.dut.get_ports(self.nic)
-        # Verify that enough ports are available
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
-        #self.cores = "1S/8C/1T"
-        self.pmdout = PmdOutput(self.dut)
-
-        localPort = self.tester.get_local_port(self.dut_ports[0])
-        self.__tx_iface = self.tester.get_interface(localPort)
-        self.pf_interface = self.dut.ports_info[self.dut_ports[0]]['intf']
-        self.pf_mac = self.dut.get_mac_address(0)
-        self.pf_pci = self.dut.ports_info[self.dut_ports[0]]['pci']
-        self.verify(self.nic in ["columbiaville_25g","columbiaville_100g"], "%s nic not support ethertype filter" % self.nic)
-
+        self.verify(len(self.dut_ports) >= 2, "Insufficient ports for testing")
+        # Verify that enough threads are available
+        cores = self.dut.get_core_list("1S/4C/1T")
+        self.verify(cores is not None, "Insufficient cores for speed testing")
+        self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
+        self.tester_port0 = self.tester.get_local_port(self.dut_ports[0])
+        self.tester_port1 = self.tester.get_local_port(self.dut_ports[1])
+        self.tester_iface0 = self.tester.get_interface(self.tester_port0)
+        self.tester_iface1 = self.tester.get_interface(self.tester_port1)
+        self.pci0 = self.dut.ports_info[self.dut_ports[0]]['pci']
+        self.pci1 = self.dut.ports_info[self.dut_ports[1]]['pci']
+        self.pass_flag = 'passed'
+        self.fail_flag = 'failed'
 
+        self.pkt = Packet()
+        self.pmd_output = PmdOutput(self.dut)
+        self.package_version = self.launch_testpmd()
+        self.symmetric = False
+        self.rxq = 64
+        self.rssprocess = RssProcessing(self, self.pmd_output, [self.tester_iface0, self.tester_iface1], self.rxq)
+        self.logger.info('rssprocess.tester_ifaces: {}'.format(self.rssprocess.tester_ifaces))
+        self.logger.info('rssprocess.test_case: {}'.format(self.rssprocess.test_case))
 
     def set_up(self):
         """
         Run before each test case.
         """
-        self.dut.kill_all()
+        if self.symmetric:
+            self.pmd_output.execute_cmd("port config all rss all")
+        self.pmd_output.execute_cmd("start")
 
-    def tear_down(self):
-        """
-        Run after each test case.
-        """
-        self.dut.kill_all()
+    def launch_testpmd(self, symmetric=False, package='comms'):
+        if symmetric:
+            param = "--rxq=64 --txq=64"
+        else:
+            param = "--rxq=64 --txq=64 --disable-rss --rxd=384 --txd=384"
+        out = self.pmd_output.start_testpmd(cores="1S/4C/1T", param=param,
+                                            eal_param=f"-w {self.pci0}", socket=self.ports_socket)
+        self.symmetric = symmetric
+        if symmetric is True:
+            '''
+            symmetric may be False/True/2(any other not negative value)
+            False: disable rss
+            True: enable rss and execute port config all rss
+            2: enable rss and do not execute port config all rss
+            '''
+            # Need config rss in setup
+            self.pmd_output.execute_cmd("port config all rss all")
+        self.pmd_output.execute_cmd("set fwd rxonly")
+        self.pmd_output.execute_cmd("set verbose 1")
+        res = self.pmd_output.wait_link_status_up('all', timeout=15)
+        self.verify(res is True, 'there have port link is down')
 
-    
-    def tear_down_all(self):
-        """
-        Run after each test suite.
-        """
-        self.dut.kill_all()
+    def switch_testpmd(self, symmetric=True):
+        if symmetric != self.symmetric:
+            self.pmd_output.quit()
+            self.launch_testpmd(symmetric=symmetric)
+            self.pmd_output.execute_cmd("start")
 
+    def test_mac_ipv4(self):
+        self.switch_testpmd(symmetric=False)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_1)
+        self.pmd_output.execute_cmd("rx_vxlan_port add 4789 0")
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_2)
 
-    def create_testpmd_command(self):
-        """
-        Create testpmd command for non-pipeline mode
-        """
-        #Prepare testpmd EAL and parameters 
-        all_eal_param = self.dut.create_eal_parameters(ports=[self.pf_pci])
-        print(all_eal_param)   #print eal parameters
-        command = self.dut.apps_name['test-pmd'] + all_eal_param + " -- -i --rxq=64 --txq=64"
-        return command
-
-    def _rte_flow_validate_pattern(self, test_vectors, command, is_vxlan):
-
-        out = self.dut.send_expect(command, "testpmd> ", 120)
-        self.logger.debug(out)  #print the log
-        self.dut.send_expect("port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd", "testpmd> ", 15)
-        if is_vxlan:
-            self.dut.send_expect("rx_vxlan_port add 4789 0", "testpmd> ", 15)
-        self.dut.send_expect("set fwd rxonly", "testpmd> ", 15)
-        self.dut.send_expect("set verbose 1", "testpmd> ", 15)
-
-        self.count = 1
-        self.mac_count = 100
-        result_dic = dict()
-        result_flag = 0
-        for tv in test_vectors:
-            out = self.dut.send_expect(tv["rte_flow_pattern"], "testpmd> ", 15)  #create a rule
-            print(out)
-            self.dut.send_expect("start", "testpmd> ", 15)
-            time.sleep(2)
-            tv["check_func_param"]["expect_port"] = self.dut_ports[0]
-            print("expect_port is", self.dut_ports[0])
-
-            #send a packet
-            if isinstance(tv["scapy_str"], list):
-                pkt = packet.Packet()
-                pkt.update_pkt(tv["scapy_str"])
-                pkt.send_pkt(self.tester, tx_port=self.__tx_iface, count=self.count)
-            else:
-                for index in range(10):
-                    pkt = Packet(pkt_str=tv["scapy_str"])
-                    pkt.send_pkt(self.tester, tx_port=self.__tx_iface, count=self.count)
-                    print("packet:")
-                    print(tv["scapy_str"])
-
-            if "symmetric" or "xor" in tv["name"]:
-                out = self.dut.get_session_output(timeout=3)
-                self.dut.send_expect("stop", "testpmd> ", 60)
-            else:
-                out = self.dut.send_expect("stop", "testpmd> ", 60)
-                result, ret_log = rfc.check_rx_tx_packets_match(out, self.mac_count)
-                self.verify(result is True, ret_log)
-            ret_result, log_msg = tv["check_func"](out)
-            print("%s result is: %s ,%s " % (tv["name"], ret_result, log_msg))
-
-            result_dic[tv["name"]] = ret_result
-
-        print(result_dic)
-
-        if False in result_dic.values():
-            result_flag = 1
-
-        self.dut.send_expect("flow flush %d" % self.dut_ports[0], "testpmd> ")
-        self.dut.send_expect("quit", "#")
-        self.verify(result_flag == 0, "Some case failed")
-
-    def test_advance_rss_ipv4(self):
-        command = self.create_testpmd_command()
-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4, command, is_vxlan = True)
-
-    def test_advance_rss_ipv4_port(self):  
-        command = self.create_testpmd_command()
-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_port, command, is_vxlan = True)
-
-    def test_advance_rss_ipv4_nvgre(self):  
-        command = self.create_testpmd_command()
-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_nvgre, command, is_vxlan = True)
-
-    def test_advance_rss_ipv4_vxlan(self):  
-        command = self.create_testpmd_command()
-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_vxlan, command, is_vxlan = True)
-
-    def test_advance_rss_ipv6(self):  
-        command = self.create_testpmd_command()
-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv6, command, is_vxlan = True)
-
-    def test_advance_rss_ipv4_pppoe(self):  
-        command = self.create_testpmd_command()
-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_pppoe, command, is_vxlan = True)
-
-    def test_advance_rss_ipv4_gtp(self):  
-        command = self.create_testpmd_command()
-        self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_gtp, command, is_vxlan = True)
-
-    def test_rss_ipv4_symetric_toeplitz(self):  
-         command = self.create_testpmd_command()
-         self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_symmetric_toeplitz, command, is_vxlan = True)
-         
-    def test_rss_ipv6_symetric_toeplitz(self):  
-         command = self.create_testpmd_command()
-         self._rte_flow_validate_pattern(tvs_mac_rss_ipv6_symmetric_toeplitz, command, is_vxlan = True)
-    
-    def test_rss_ipv4_symetric_toeplitz_nvgre(self):  
-         command = self.create_testpmd_command()
-         self._rte_flow_validate_pattern(tvs_mac_rss_ipv4_symmetric_toeplitz_nvgre, command, is_vxlan = True)
-    
-    def test_rss_ipv6_symetric_toeplitz_nvgre(self):  
-         command = self.create_testpmd_command()
-         self._rte_flow_validate_pattern(tvs_mac_rss_ipv6_symmetric_toeplitz_nvgre, command, is_vxlan = True)
-         
-    def test_rss_symetric_toeplitz_vxlan(self):  
-         command = self.create_testpmd_command()
-         self._rte_flow_validate_pattern(tvs_mac_rss_symmetric_toeplitz_vxlan, command, is_vxlan = True)
-    
-    def test_rss_simple_xor(self):  
-         command = self.create_testpmd_command()
-         self._rte_flow_validate_pattern(tvs_mac_rss_simple_xor, command, is_vxlan = True)   
+    def test_mac_ipv4_udp(self):
+        self.switch_testpmd(symmetric=False)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_udp)
+
+    def test_mac_ipv4_tcp(self):
+        self.switch_testpmd(symmetric=False)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_tcp)
+
+    def test_mac_ipv4_sctp(self):
+        self.switch_testpmd(symmetric=False)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_sctp)
+
+    def test_mac_ipv6(self):
+        self.switch_testpmd(symmetric=False)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6)
+
+    def test_mac_ipv6_udp(self):
+        self.switch_testpmd(symmetric=False)
+        self.pmd_output.execute_cmd("rx_vxlan_port add 4789 0")
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_udp)
+
+    def test_mac_ipv6_tcp(self):
+        self.switch_testpmd(symmetric=False)
+        self.pmd_output.execute_cmd("rx_vxlan_port add 4789 0")
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_tcp)
+
+    def test_mac_ipv6_sctp(self):
+        self.switch_testpmd(symmetric=False)
+        self.pmd_output.execute_cmd("rx_vxlan_port add 4789 0")
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_sctp)
+
+    def test_symmetric_mac_ipv4(self):
+        self.switch_testpmd(symmetric=2)
+        self.pmd_output.execute_cmd("rx_vxlan_port add 4789 0")
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_symmetric)
+
+    def test_symmetric_mac_ipv4_udp(self):
+        self.switch_testpmd(symmetric=True)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_udp_symmetric)
+
+    def test_symmetric_mac_ipv4_tcp(self):
+        self.switch_testpmd(symmetric=True)
+        self.pmd_output.execute_cmd("rx_vxlan_port add 4789 0")
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_tcp_symmetric)
+
+    def test_symmetric_mac_ipv4_sctp(self):
+        self.switch_testpmd(symmetric=True)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_sctp_symmetric)
+
+    def test_symmetric_mac_ipv6(self):
+        self.switch_testpmd(symmetric=2)
+        self.pmd_output.execute_cmd("rx_vxlan_port add 4789 0")
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_symmetric)
+
+    def test_symmetric_mac_ipv6_udp(self):
+        self.switch_testpmd(symmetric=True)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_udp_symmetric)
+
+    def test_symmetric_mac_ipv6_tcp(self):
+        self.switch_testpmd(symmetric=True)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_tcp_symmetric)
 
+    def test_symmetric_mac_ipv6_sctp(self):
+        self.switch_testpmd(symmetric=True)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_sctp_symmetric)
+
+    def test_32bit_ipv6_prefix(self):
+        self.switch_testpmd(symmetric=True)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_32bit_prefix)
+
+    def test_48bit_ipv6_prefix(self):
+        self.switch_testpmd(symmetric=True)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_48bit_prefix)
+
+    def test_64bit_ipv6_prefix(self):
+        self.switch_testpmd(symmetric=True)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_64bit_prefix)
+
+    def test_global_simple_xor(self):
+        self.switch_testpmd(symmetric=True)
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_global_simple_xor)
+
+    def test_negative_case(self):
+        self.switch_testpmd(symmetric=False)
+        rules = [
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l3-src-only end key_len 0 queues end / end',
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l3-src-only end key_len 0 queues end / end',
+            'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end',
+            'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end',
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv6 end key_len 0 queues end / end',
+            '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',
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types eth end key_len 0 queues end / end',
+        ]
+        for i in rules:
+            out = self.pmd_output.execute_cmd(i, timeout=1)
+            self.verify('ice_flow_create(): Failed to create flow' in out, "rule %s create successfully" % i)
+
+        rules_val = [
+            'flow validate 0 ingress pattern eth / ipv4 / end actions rss types eth l3-src-only end key_len 0 queues end / end',
+            'flow validate 0 ingress pattern eth / ipv4 / end actions rss types ipv4-udp end key_len 0 queues end / end',
+            'flow validate 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end',
+            'flow validate 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end',
+            'flow validate 0 ingress pattern eth / ipv4 / end actions rss types ipv6 end key_len 0 queues end / end',
+            'flow validate 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 l3-src-only end key_len 0 queues end / end',
+            'flow validate 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types eth end key_len 0 queues end / end',
+        ]
+        for i in rules_val:
+            out = self.pmd_output.execute_cmd(i, timeout=1)
+            self.verify('Invalid argument' in out, "rule %s validate successfully" % i)
+
+    def test_multirules(self):
+        self.switch_testpmd(symmetric=True)
+        #Subcase 1: two rules with same pattern but different hash input set, not hit default profile
+        self.rssprocess.error_msgs = []
+        self.logger.info('===================Test sub case: multirules subcase 1 ================')
+        rule_id_0 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end', check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)
+        tests = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)',
+                        'action': {'save_hash': 'ipv4-udp'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)',
+                        'action': {'check_hash_different': 'ipv4-udp'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests, 0)
+        rule_id_1 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end', check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)
+        tests = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)',
+                        'action': {'save_hash': 'ipv4-udp'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)',
+                        'action': {'check_hash_same': 'ipv4-udp'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.7")/UDP(dport=45)/Raw("x"*480)',
+                        'action': {'check_hash_different': 'ipv4-udp'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)
+        self.rssprocess.check_rule(port_id=0)
+        tests = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)',
+                        'action': {'save_hash': 'ipv4-udp'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.9")/UDP(dport=45)/Raw("x"*480)',
+                        'action': {'check_hash_different': 'ipv4-udp'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.9")/UDP(dport=45)/Raw("x"*480)',
+                        'action': {'check_hash_different': 'ipv4-udp'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)
+        self.rssprocess.handle_tests(tests, 0)
+
+        # Subcase 2: two rules with same pattern but different hash input set, hit default profile
+        self.logger.info('===================Test sub case: multirules subcase 2 ================')
+        rule_id_0 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end', check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)
+        tests = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*480)',
+                        'action': {'save_hash': 'ipv4-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/Raw("x"*480)',
+                        'action': {'check_hash_different': 'ipv4-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.8")/Raw("x"*480)',
+                        'action': {'check_hash_same': 'ipv4-pay'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests, 0)
+        rule_id_1 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end', check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)
+        tests = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*480)',
+                        'action': {'save_hash': 'ipv4-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/Raw("x"*480)',
+                        'action': {'check_hash_same': 'ipv4-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.7")/Raw("x"*480)',
+                        'action': {'check_hash_different': 'ipv4-pay'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)
+        self.rssprocess.check_rule(port_id=0)
+        tests = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*480)',
+                        'action': {'check_no_hash': 'ipv4-pay'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)
+
+        # Subcase 3: two rules, scope smaller created first, and the larger one created later
+        self.logger.info('===================Test sub case: multirules subcase 3 ================')
+        rule_id_0 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end', check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)
+        tests_3 = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)',
+                        'action': {'save_hash': 'ipv4-udp-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=25, dport=45)/Raw("x"*480)',
+                        'action': {'check_hash_different': 'ipv4-udp-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.8")/UDP(sport=23, dport=44)/Raw("x"*480)',
+                        'action': {'check_hash_same': 'ipv4-udp-pay'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests_3, 0)
+        rule_id_1 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end', check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)
+        tests = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)',
+                        'action': {'save_hash': 'ipv4-udp-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)',
+                        'action': {'check_hash_different': 'ipv4-udp-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.8")/UDP(sport=25, dport=99)/Raw("x"*480)',
+                        'action': {'check_hash_same': 'ipv4-udp-pay'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)
+        self.rssprocess.handle_tests(tests_3, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)
+        tests = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)',
+                        'action': {'check_no_hash': 'ipv4-udp-pay'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests, 0)
+
+        # Subcase 4: two rules, scope larger created first, and the smaller one created later
+        self.logger.info('===================Test sub case: multirules subcase 4 ================')
+        rule_id_0 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end', check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)
+        tests_4 = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)',
+                        'action': {'save_hash': 'ipv4-udp-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)',
+                        'action': {'check_hash_different': 'ipv4-udp-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.8")/UDP(sport=25, dport=99)/Raw("x"*480)',
+                        'action': {'check_hash_same': 'ipv4-udp-pay'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests_4, 0)
+        rule_id_1 = self.rssprocess.create_rule('flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end', check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)
+        tests = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)',
+                        'action': {'save_hash': 'ipv4-udp-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=25, dport=45)/Raw("x"*480)',
+                        'action': {'check_hash_different': 'ipv4-udp-pay'},
+                    },
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.8")/UDP(sport=23, dport=44)/Raw("x"*480)',
+                        'action': {'check_hash_same': 'ipv4-udp-pay'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)
+        self.rssprocess.handle_tests(tests_4, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)
+        tests = [
+                    {
+                        'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=23, dport=45)/Raw("x"*480)',
+                        'action': {'check_no_hash': 'ipv4-udp-pay'},
+                    },
+                ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.verify(not self.rssprocess.error_msgs, 'some subcases failed')
+
+    def tear_down(self):
+        # destroy all flow rule on port 0
+        self.dut.send_command("flow flush 0", timeout=1)
+        self.dut.send_command("clear port stats all", timeout=1)
+        self.pmd_output.execute_cmd("stop")
+
+    def tear_down_all(self):
+        self.dut.kill_all()
-- 
2.17.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dts] [PATCH V4 3/8] tests/TestSuite_cvl_advanced_iavf_rss:update script
  2020-11-03  8:36 [dts] [PATCH V4 0/8] tests: update or add rss related suites Haiyang Zhao
  2020-11-03  8:36 ` [dts] [PATCH V4 1/8] tests/rte_flow_common: add a common module to process rss test Haiyang Zhao
  2020-11-03  8:36 ` [dts] [PATCH V4 2/8] tests/TestSuite_cvl_advanced_rss:update script Haiyang Zhao
@ 2020-11-03  8:36 ` Haiyang Zhao
  2020-11-03  9:07   ` Xie, WeiX
  2020-11-03  8:36 ` [dts] [PATCH V4 4/8] tests/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp Haiyang Zhao
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 16+ messages in thread
From: Haiyang Zhao @ 2020-11-03  8:36 UTC (permalink / raw)
  To: dts, qi.fu; +Cc: Xie wei

From: Xie wei <weix.xie@intel.com>

* according to test plan, update cvl_advanced_iavf_rss script.

Signed-off-by: Xie wei <weix.xie@intel.com>
---
 tests/TestSuite_cvl_advanced_iavf_rss.py | 6305 ++++++++++++++++++----
 1 file changed, 5279 insertions(+), 1026 deletions(-)

diff --git a/tests/TestSuite_cvl_advanced_iavf_rss.py b/tests/TestSuite_cvl_advanced_iavf_rss.py
index 5c7da2b..7513a80 100644
--- a/tests/TestSuite_cvl_advanced_iavf_rss.py
+++ b/tests/TestSuite_cvl_advanced_iavf_rss.py
@@ -29,781 +29,5078 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import re
-import time
 
+import re
+import random
 from packet import Packet
 from pmd_output import PmdOutput
 from test_case import TestCase
-from config import UserConf
-import rte_flow_common as rfc
-
-vf0_mac = "00:01:23:45:67:89"
-vf1_mac = "00:11:22:33:44:55"
+from rte_flow_common import RssProcessing
+
+vf0_mac = "00:11:22:33:44:55"
+
+# toeplitz related data start
+mac_ipv4_toeplitz_basic_pkt = {
+    'ipv4-nonfrag': [
+       '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,
+    ],
+    'ipv4-frag': [
+        '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,
+    ],
+    'ipv4-icmp': [
+        '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,
+    ],
+    'ipv4-tcp': [
+        '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,
+    ],
+    # 'ipv4-udp-vxlan': [
+    #     '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,
+    # ],
+}
+
+mac_ipv4_udp_toeplitz_basic_pkt = {
+    'ipv4-udp': [
+       '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,
+    ],
+    # 'nvgre': [
+    #     '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,
+    # ],
+}
+
+mac_ipv4_tcp_toeplitz_basic_pkt = {
+    'ipv4-tcp': [
+       '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,
+    ],
+    # 'nvgre': [
+    #     '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,
+    # ],
+}
+
+mac_ipv4_sctp_toeplitz_basic_pkt = {
+    'ipv4-sctp': [
+       '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,
+    ],
+    # 'nvgre': [
+    #     '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,
+    # ],
+}
+
+mac_ipv6_toeplitz_basic_pkt = {
+    'ipv6-nonfrag': [
+       '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,
+    ],
+    'ipv6-frag': [
+        '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,
+    ],
+    'ipv6-icmp': [
+        '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,
+    ],
+    'ipv6-udp': [
+        '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,
+    ],
+    # 'nvgre': [
+    #     '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,
+    # ],
+}
+
+mac_ipv6_udp_toeplitz_basic_pkt = {
+    'ipv6-udp': [
+       '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,
+    ],
+    # 'ipv4_udp_vxlan_ipv6_udp': [
+    #     '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,
+    # ],
+}
+
+mac_ipv6_tcp_toeplitz_basic_pkt = {
+    'ipv6-tcp': [
+       '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,
+    ],
+    # 'ipv4_tcp_vxlan_ipv6_tcp': [
+    #     '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,
+    # ],
+}
+
+mac_ipv6_sctp_toeplitz_basic_pkt = {
+    'ipv6-sctp': [
+       '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,
+    ],
+    # 'ipv4_sctp_vxlan_ipv6_sctp': [
+    #     '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,
+    # ],
+}
+
+#mac_ipv4
+mac_ipv4_l2_src = {
+    'sub_casename': 'mac_ipv4_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+    ],
+}
+
+mac_ipv4_l2_dst = {
+    'sub_casename': 'mac_ipv4_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+    ],
+}
+
+mac_ipv4_l2src_l2dst = {
+    'sub_casename': 'mac_ipv4_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+    ],
+}
+
+mac_ipv4_l3_src = {
+    'sub_casename': 'mac_ipv4_l3_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],
+        #     'action': {'save_hash': 'ipv4-udp-vxlan'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        # },
+    ],
+}
+
+mac_ipv4_l3_dst = {
+    'sub_casename': 'mac_ipv4_l3_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],
+        #     'action': {'save_hash': 'ipv4-udp-vxlan'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        # },
+    ],
+}
+
+mac_ipv4_all = {
+    'sub_casename': 'mac_ipv4_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'],
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'],
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'],
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'],
+        #     'action': {'save_hash': 'ipv4-udp-vxlan'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-frag'][0],
+            'action': {'check_hash_different': 'ipv4-frag'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-icmp'][0],
+            'action': {'check_hash_different': 'ipv4-icmp'},
+        },
+        {
+            'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-tcp'][0],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_toeplitz_basic_pkt['ipv4-udp-vxlan'][0],
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan'},
+        # },
+    ],
+}
 
-tv_iavf_mac_eth_src_only = {
-    "name": "iavf_mac_eth_src_only",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4  / end actions rss types l2-src-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(src=RandMAC())/IP()/("X"*480)'],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+# mac ipv4_udp
+mac_ipv4_udp_l2_src = {
+    'sub_casename': 'mac_ipv4_udp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+    ],
 }
 
-tv_iavf_mac_eth_dst_only = {
-    "name": "iavf_mac_eth_dst_only",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4  / end actions rss types l2-dst-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP()/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv4_udp_l2_dst = {
+    'sub_casename': 'mac_ipv4_udp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+    ],
 }
 
-tv_iavf_mac_ipv4_l3_src = {
-    "name": "iavf_mac_ipv4_l3_src",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-src-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_l3_src_frag = {
-    "name": "iavf_mac_ipv4_l3_src_frag",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-src-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP(),frag=5)/SCTP(sport=RandShort())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP(src=RandIP(), dst="192.168.0.8", frag=5)/SCTP(sport=RandShort())/("X" * 80)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_l3_dst = {
-    "name": "iavf_mac_ipv4_l3_dst",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-dst-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(dst=RandIP())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP(src="192.168.0.8",dst=RandIP())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_l3_dst_frag = {
-    "name": "iavf_mac_ipv4_l3_dst_frag",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-dst-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(dst=RandIP(), frag=5)/SCTP(sport=RandShort())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_l3_src_frag_icmp = {
-    "name": "iavf_mac_ipv4_l3_dst_frag_icmp",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-src-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP(), frag=5)/ICMP()/("X" *480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_l3_dst_frag_icmp = {
-    "name": "iavf_mac_ipv4_l3_dst_frag_icmp",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-dst-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(dst=RandIP(), frag=5)/ICMP()/("X" *480)' % vf0_mac,
-                  'Ether(dst="%s")/IP(dst=RandIP(), src="192.168.0.5",frag=5)/ICMP()/("X" * 80)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_pay = {
-    "name": "iavf_mac_ipv4_pay",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/("X" *480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_pay_frag_icmp = {
-    "name": "iavf_mac_ipv4_pay_frag_icmp",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/ICMP()/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_l3_src_nvgre = {
-    "name": "iavf_mac_ipv4_l3_src_nvgre",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-src-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP()/NVGRE()/Ether()/IP(src=RandIP())/ICMP()/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_l3_dst_nvgre = {
-    "name": "iavf_mac_ipv4_l3_dst_nvgre",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-dst-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP()/NVGRE()/Ether()/IP(dst=RandIP())/ICMP()/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_nvgre_udp_frag = {
-    "name": "iavf_mac_ipv4_nvgre_udp_frag",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP()/NVGRE()/Ether()/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_nvgre_sctp = {
-    "name": "iavf_mac_ipv4_nvgre_sctp",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP()/NVGRE()/Ether()/IP(src=RandIP(),dst=RandIP())/SCTP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_tcp_pay = {
-    "name": "iavf_mac_ipv4_tcp_pay",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/TCP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP()/TCP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/TCP()/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP(src=RandIP(),dst=RandIP(),frag=4)/TCP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac,
-                  ],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_tcp_frag = {
-    "name": "iavf_mac_ipv4_tcp_frag",
-    "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",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP()) / TCP(dport=RandShort())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP(src=RandIP(),dst="192.168.0.2")/TCP(sport=22,dport=RandShort())/("X"*480)' % vf0_mac,
-                  ],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_udp = {
-    "name": "iavf_mac_ipv4_udp",
-    "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",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP())/UDP(dport=RandShort())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP(src=RandIP(),dst="192.168.0.2")/UDP(sport=33,dport=RandShort())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_udp_frag = {
-    "name": "iavf_mac_ipv4_udp_frag",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP()/UDP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/UDP()/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_sctp = {
-    "name": "iavf_mac_ipv4_sctp",
-    "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",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP())/SCTP(dport=RandShort())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP(dst=RandIP())/SCTP(sport=RandShort())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_sctp_frag = {
-    "name": "iavf_mac_ipv4_sctp_frag",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP()/UDP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/UDP()/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv6_l3_src = {
-    "name": "iavf_mac_ipv6_l3_src",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / end actions rss types l3-src-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IPv6(src=RandIP6())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv6_l3_src_frag = {
-    "name": "iavf_mac_ipv6_l3_src_frag",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / end actions rss types l3-src-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IPv6(src=RandIP6(),dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X" * 480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv6_l3_dst = {
-    "name": "iavf_mac_ipv6_l3_dst",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / end actions rss types l3-dst-only end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IPv6(dst=RandIP6())/IPv6ExtHdrFragment()/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:2020",dst=RandIP6())/IPv6ExtHdrFragment()/("X" * 480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv6_pay = {
-    "name": "iavf_mac_ipv6_pay",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IPv6(src=RandIP6(),dst=RandIP6())/IPv6ExtHdrFragment()/ICMP()/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv6_sctp_pay = {
-    "name": "iavf_mac_ipv6_sctp_pay",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IPv6(src=RandIP6())/SCTP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/SCTP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-tv_iavf_mac_ipv6_udp = {
-    "name": "iavf_mac_ipv6_udp",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IPv6(src=RandIP6()) / UDP(sport=RandShort(), dport=RandShort())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv6_udp_frag = {
-    "name": "iavf_mac_ipv6_udp_frag",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/UDP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv6_tcp = {
-    "name": "iavf_mac_ipv6_tcp",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IPv6(src=RandIP6())/TCP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv6_tcp_frag = {
-    "name": "iavf_mac_ipv6_tcp_frag",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IPv6(src=RandIP6())/IPv6ExtHdrFragment()/TCP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv4_udp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv4_udp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+    ],
 }
 
-tv_iavf_mac_cvlan_rss = {
-    "name": "iavf_mac_cvlan_rss",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / vlan / ipv4 / end actions rss types c-vlan end key_len 0 queues end / end",
-    "scapy_str": ['Ether()/Dot1Q(vlan=RandShort())/IP(src=RandIP())/UDP()/("X"*480)',
-                  'Ether(type=0x9100)/Dot1Q(vlan=RandShort())/Dot1Q(vlan=56)/IP(src=RandIP())/UDP()/("X"*480)',
-                  ],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv4_udp_l3_src = {
+    'sub_casename': 'mac_ipv4_udp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
 }
 
-tv_iavf_mac_ipv4_pfcp_session = {
-    "name": "iavf_mac_ipv4_pfcp_session",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end",
-    "scapy_str": [
-        'Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=1, SEID=12)/Raw("X"*480)' % vf0_mac,
-        'Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=0)/("X"*480)' % vf0_mac,
-        'Ether(dst="%s")/IPv6()/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=1, SEID=12)/("X"*480)' % vf0_mac,
+mac_ipv4_udp_l3_dst = {
+    'sub_casename': 'mac_ipv4_udp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
     ],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
 }
 
-tv_iavf_mac_ipv6_pfcp_session = {
-    "name": "iavf_mac_ipv6_pfcp_session",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IPv6()/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=1, SEID=12)/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IPv6()/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=0)/("X"*480)' % vf0_mac,
-                  'Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/PFCP(Sfield=1, SEID=12)/'
-                  '("X"*480)' % vf0_mac,
-                  ],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv4_udp_l3src_l4src = {
+    'sub_casename': 'mac_ipv4_udp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
 }
 
-tv_iavf_gtpu_ipv4_up_match_dismatch = {
-    "name": "iavf_gtpu_ipv4_up_match_dismatch",
-    "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 key_len 0 queues end / end",
+mac_ipv4_udp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv4_udp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "match_str": ['Ether(src="00:00:00:00:01:01",dst="%s")/IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255,teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34) / IP(src=RandIP()) /("X"*480)' % vf0_mac],
+mac_ipv4_udp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv4_udp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01",dst="%s")/IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255,teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) / IP(dst=RandIP()) /("X"*480)' % vf0_mac,
-                     'Ether(src="00:00:00:00:01:01",dst="%s")/IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255,teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) / IP(dst=RandIP()) / UDP() /("X"*480)' % vf0_mac,
-                     ],
+mac_ipv4_udp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv4_udp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv4_udp_l4_src = {
+    'sub_casename': 'mac_ipv4_udp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
 }
 
-tv_iavf_gtpu_ipv4_down_match_dismatch = {
-    "name": "iavf_gtpu_ipv4_down_match_dismatch",
-    "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 key_len 0 queues end / end",
+mac_ipv4_udp_l4_dst = {
+    'sub_casename': 'mac_ipv4_udp_l4_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "match_str": ['Ether(src="00:00:00:00:01:01",dst="%s")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst=RandIP())/("X"*480)' % vf0_mac],
+mac_ipv4_udp_all = {
+    'sub_casename': 'mac_ipv4_udp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['ipv4-udp'],
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_udp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01",dst="%s")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP())/("X"*480)' % vf0_mac,
-                     ],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+# mac ipv4_tcp
+mac_ipv4_tcp_l2_src = {
+    'sub_casename': 'mac_ipv4_tcp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+    ],
 }
 
-tv_iavf_gtpu_ipv4_frag_up_match_dismatch = {
-    "name": "iavf_gtpu_ipv4_frag_up_match_dismatch",
-    "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 "
-                        "key_len 0 queues end / end ",
+mac_ipv4_tcp_l2_dst = {
+    'sub_casename': 'mac_ipv4_tcp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+    ],
+}
 
-    "match_str": ['Ether(src="00:00:00:00:01:01", dst="%s")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP(),frag=6)/("X"*480)' % vf0_mac],
+mac_ipv4_tcp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv4_tcp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+    ],
+}
 
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01", dst="%s")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=RandIP(),frag=6)/("X"*480)' % vf0_mac],
+mac_ipv4_tcp_l3_src = {
+    'sub_casename': 'mac_ipv4_tcp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv4_tcp_l3_dst = {
+    'sub_casename': 'mac_ipv4_tcp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
 }
 
-tv_iavf_gtpu_ipv4_frag_down_match_dismatch = {
+mac_ipv4_tcp_l3src_l4src = {
+    'sub_casename': 'mac_ipv4_tcp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "name": "iavf_gtpu_ipv4_frag_down_match_dismatch",
-    "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 "
-                        "key_len 0 queues end / end ",
+mac_ipv4_tcp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv4_tcp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "match_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) / IP(dst=RandIP(), frag=6) /("X"*480)' % vf0_mac],
+mac_ipv4_tcp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv4_tcp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34) / IP(src=RandIP(), frag=6) /("X"*480)' % vf0_mac],
+mac_ipv4_tcp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv4_tcp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv4_tcp_l4_src = {
+    'sub_casename': 'mac_ipv4_tcp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
 }
 
-tv_iavf_gtpu_ipv4_udp_up_match_dismatch = {
-    "name": "iavf_gtpu_ipv4_udp_up_match_dismatch",
-    "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 "
-                        "l3-src-only end key_len 0 queues end / end",
+mac_ipv4_tcp_l4_dst = {
+    'sub_casename': 'mac_ipv4_tcp_l4_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "match_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP()) / UDP(dport=RandShort())/("X"*480)' % vf0_mac],
+mac_ipv4_tcp_all = {
+    'sub_casename': 'mac_ipv4_tcp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['ipv4-tcp'],
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_tcp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst=RandIP()) / UDP(dport=RandShort())/("X"*480)' % vf0_mac],
+# mac ipv4_sctp
+mac_ipv4_sctp_l2_src = {
+    'sub_casename': 'mac_ipv4_sctp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+    ],
+}
 
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv4_sctp_l2_dst = {
+    'sub_casename': 'mac_ipv4_sctp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+    ],
 }
 
-tv_iavf_gtpu_ipv4_udp_down_match_dismatch = {
+mac_ipv4_sctp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv4_sctp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+    ],
+}
 
-    "name": "iavf_gtpu_ipv4_udp_down_match_dismatch",
-    "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 "
-                        "key_len 0 queues end / end ",
+mac_ipv4_sctp_l3_src = {
+    'sub_casename': 'mac_ipv4_sctp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "match_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) / IP(dst=RandIP(), frag=6) /("X"*480)' % vf0_mac],
+mac_ipv4_sctp_l3_dst = {
+    'sub_casename': 'mac_ipv4_sctp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34) / IP(src=RandIP(), frag=6) /("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv4_sctp_l3src_l4src = {
+    'sub_casename': 'mac_ipv4_sctp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
 }
 
-tv_iavf_gtpu_ipv4_tcp_up_match_dismatch = {
-    "name": "iavf_gtpu_ipv4_tcp_up_match_dismatch",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / tcp /"
-                        " end actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end",
+mac_ipv4_sctp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv4_sctp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "match_str": ['Ether(dst="%s") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP())/TCP(dport=RandShort())/("X"*480)' % vf0_mac],
+mac_ipv4_sctp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv4_sctp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / TCP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst=RandIP())/TCP(dport=RandShort())/("X"*480)' % vf0_mac],
+mac_ipv4_sctp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv4_sctp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv4_sctp_l4_src = {
+    'sub_casename': 'mac_ipv4_sctp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
 }
 
-tv_iavf_gtpu_ipv4_tcp_down_match_dismatch = {
+mac_ipv4_sctp_l4_dst = {
+    'sub_casename': 'mac_ipv4_sctp_l4_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "name": "iavf_gtpu_ipv4_tcp_down_match_dismatch",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / tcp /"
-                        " end actions rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end",
+mac_ipv4_sctp_all = {
+    'sub_casename': 'mac_ipv4_sctp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / sctp / end actions rss types ipv4-sctp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['ipv4-sctp'],
+            'action': {'check_hash_different': 'ipv4-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv4_sctp_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "match_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=RandIP())/TCP(dport=RandShort())/("X"*480)' % vf0_mac],
+# mac_ipv6
+mac_ipv6_l2_src = {
+    'sub_casename': 'mac_ipv6_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+    ],
+}
 
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / TCP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=RandIP())/TCP(dport=RandShort())/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv6_l2_dst = {
+    'sub_casename': 'mac_ipv6_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+    ],
 }
 
-tv_iavf_gtpu_ipv4_icmp_up_match_dismatch = {
-    "name": "iavf_gtpu_ipv4_icmp_up_match_dismatch",
-    "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 "
-                        "key_len 0 queues end / end",
+mac_ipv6_l2src_l2dst = {
+    'sub_casename': 'mac_ipv6_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+    ],
+}
 
-    "match_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP())/ICMP()/("X"*480)' % vf0_mac],
+mac_ipv6_l3_src = {
+    'sub_casename': 'mac_ipv6_l3_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'][0],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst=RandIP())/ICMP()/("X"*480)' % vf0_mac],
+mac_ipv6_l3_dst = {
+    'sub_casename': 'mac_ipv6_l3_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'][0],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
 
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv6_all = {
+    'sub_casename': 'mac_ipv6_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'],
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'],
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'],
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'],
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-nonfrag'][0],
+            'action': {'check_hash_different': 'ipv6-nonfrag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-frag'][0],
+            'action': {'check_hash_different': 'ipv6-frag'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-icmp'][0],
+            'action': {'check_hash_different': 'ipv6-icmp'},
+        },
+        {
+            'send_packet': mac_ipv6_toeplitz_basic_pkt['ipv6-udp'][0],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_toeplitz_basic_pkt['nvgre'][0],
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+}
+# mac_ipv6_udp
+mac_ipv6_udp_l2_src = {
+    'sub_casename': 'mac_ipv6_udp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+    ],
 }
 
-tv_iavf_gtpu_ipv4_icmp_down_match_dismatch = {
+mac_ipv6_udp_l2_dst = {
+    'sub_casename': 'mac_ipv6_udp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+    ],
+}
 
-    "name": "iavf_gtpu_ipv4_icmp_down_match_dismatch",
-    "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 "
-                        "key_len 0 queues end / end",
+mac_ipv6_udp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv6_udp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+    ],
+}
 
-    "match_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=RandIP())/ICMP()/("X"*480)' % vf0_mac],
+mac_ipv6_udp_l3_src = {
+    'sub_casename': 'mac_ipv6_udp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+}
 
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34) /IP(src=RandIP())/ICMP()/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
+mac_ipv6_udp_l3_dst = {
+    'sub_casename': 'mac_ipv6_udp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
 }
 
-tv_iavf_gtpu_ipv4_sctp_up_match_dismatch = {
-    "name": "iavf_gtpu_ipv4_sctp_up_match_dismatch",
-    "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 "
-                        "key_len 0 queues end / end",
-    "match_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=RandIP())/SCTP()/("X"*480)' % vf0_mac],
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152) / GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst=RandIP())/SCTP()/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
+mac_ipv6_udp_l3src_l4src = {
+    'sub_casename': 'mac_ipv6_udp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+}
 
-tv_iavf_gtpu_ipv4_sctp_down_match_dismatch = {
-    "name": "iavf_gtpu_ipv4_sctp_down_match_dismatch",
-    "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 "
-                        "key_len 0 queues end / end",
-    "match_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                  'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst=RandIP())/SCTP()/("X"*480)' % vf0_mac],
-    "dismatch_str": ['Ether(src="00:00:00:00:01:01", dst="%s") / IP() / UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/'
-                     'GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(src=RandIP())/SCTP()/("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_mac_ipv4_tcp_inputset = {
-    "name": "iavf_mac_ipv4_tcp_inputset",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end",
-    "pf_rule": "rx-flow-hash tcp4 sdfn",
-    "check_pf_rule_set": "rx-flow-hash tcp4",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/TCP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "pf_scapy": ['Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/TCP(sport=RandShort(),dport=RandShort())/("X"*480)'],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue,
-    "check_pf_rss_func": rfc.check_pf_rss_queue
-}
-
-tv_mac_ipv4_udp_inputset = {
-    "name": "iavf_mac_ipv4_udp_inputset",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end",
-    "pf_rule": "rx-flow-hash udp4 sdfn",
-    "check_pf_rule_set": "rx-flow-hash udp4",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "pf_scapy": ['Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/UDP(sport=RandShort(),dport=RandShort())/("X"*480)'],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue,
-    "check_pf_rss_func": rfc.check_pf_rss_queue
-}
-
-tv_mac_ipv4_sctp_inputset = {
-    "name": "iavf_mac_ipv4_sctp_inputset",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-sctp4 end key_len 0 queues end / end",
-    "pf_rule": "rx-flow-hash sctp4 sdfn",
-    "check_pf_rule_set": "rx-flow-hash sctp4",
-    "scapy_str": ['Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/SCTP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "pf_scapy": ['Ether(dst="%s")/IP(src=RandIP(),dst=RandIP())/SCTP()/("X"*480)'],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue,
-    "check_pf_rss_func": rfc.check_pf_rss_queue
-}
-
-tv_mac_ipv6_tcp_inputset = {
-    "name": "iavf_mac_ipv6_tcp_inputset",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end",
-    "pf_rule": "rx-flow-hash tcp6 sdfn",
-    "check_pf_rule_set": "rx-flow-hash tcp6",
-    "scapy_str": ['Ether(dst="%s")/IPv6(src=RandIP6(),dst=RandIP6())/TCP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "pf_scapy": ['Ether(dst="%s")/IPv6(src=RandIP6(),dst=RandIP6())/TCP(sport=RandShort(),dport=RandShort())/("X"*480)'],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue,
-    "check_pf_rss_func": rfc.check_pf_rss_queue
-}
-
-tv_mac_ipv6_udp_inputset = {
-    "name": "iavf_mac_ipv6_udp_inputset",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end",
-    "pf_rule": "rrx-flow-hash udp6 sdfn",
-    "check_pf_rule_set": "rx-flow-hash udp6",
-    "scapy_str": ['Ether(dst="%s")/IPv6(src=RandIP6(),dst=RandIP6())/UDP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "pf_scapy": ['Ether(dst="%s")/IPv6(src=RandIP6(),dst=RandIP6())/UDP(sport=RandShort(),dport=RandShort())/("X"*480)'],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue,
-    "check_pf_rss_func": rfc.check_pf_rss_queue
-}
-
-tv_mac_ipv6_sctp_inputset = {
-    "name": "iavf_mac_ipv6_sctp_inputset",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp end key_len 0 queues end / end",
-    "pf_rule": "rx-flow-hash sctp6 sdfn",
-    "check_pf_rule_set": "rx-flow-hash sctp6",
-    "scapy_str": ['Ether(dst="%s")/IPv6(src=RandIP6(),dst=RandIP6())/SCTP(sport=RandShort(),dport=RandShort())/("X"*480)' % vf0_mac],
-    "pf_scapy": ['Ether(dst="%s")/IPv6(src=RandIP6(),dst=RandIP6())/SCTP()/("X"*480)'],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue,
-    "check_pf_rss_func": rfc.check_pf_rss_queue
-}
-
-tv_iavf_mac_ipv4_l2tpv3 = {
-    "name": "iavf_mac_ipv4_l2tpv3",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end",
-    "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],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv6_l2tpv3 = {
-    "name": "iavf_mac_ipv6_l2tpv3",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end",
-    "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],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_esp = {
-    "name": "iavf_mac_ipv4_esp",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / esp / end actions rss types esp end key_len 0 queues end / end",
-    "scapy_str": ['Ether(dst="%s")/IP(src="192.168.0.3", proto=50)/ESP(spi=RandShort())/Raw("X"*480)' % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv6_esp = {
-    "name": "iavf_mac_ipv6_esp",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / esp / end actions rss types esp end key_len 0 queues end / end",
-    "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],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv4_ah = {
-    "name": "iavf_mac_ipv4_ah",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 / ah / end actions rss types ah end key_len 0 queues end / end",
-    "scapy_str": ["Ether(dst='%s')/IP(src='192.168.0.3', proto=51)/AH(spi=RandShort())/Raw('X'*480)" % vf0_mac],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tv_iavf_mac_ipv6_ah = {
-    "name": "iavf_mac_ipv6_ah",
-    "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv6 / ah / end actions rss types ah end key_len 0 queues end / end",
-    "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],
-    "send_count": 100,
-    "check_func": rfc.check_iavf_packets_rss_queue
-}
-
-tvs_iavf_mac_eth_src = [
-    tv_iavf_mac_eth_src_only,
-]
-
-tvs_iavf_mac_eth_dst = [
-    tv_iavf_mac_eth_dst_only,
-]
-tvs_iavf_mac_rss_ipv4 = [
-    tv_iavf_mac_ipv4_l3_src,
-    tv_iavf_mac_ipv4_l3_src_frag,
-    tv_iavf_mac_ipv4_l3_dst,
-    tv_iavf_mac_ipv4_l3_dst_frag,
-    tv_iavf_mac_ipv4_pay,
-]
-
-tvs_iavf_mac_rss_ipv4_icmp = [
-    tv_iavf_mac_ipv4_l3_src_frag_icmp,
-    tv_iavf_mac_ipv4_l3_dst_frag_icmp,
-    tv_iavf_mac_ipv4_pay_frag_icmp
-]
-
-tvs_iavf_mac_rss_ipv4_nvgre = [
-    tv_iavf_mac_ipv4_l3_src_nvgre,
-    tv_iavf_mac_ipv4_l3_dst_nvgre,
-    tv_iavf_mac_ipv4_nvgre_udp_frag,
-    tv_iavf_mac_ipv4_nvgre_sctp,
-]
-
-tvs_iavf_mac_rss_ipv4_tcp = [
-    tv_iavf_mac_ipv4_tcp_pay,
-    tv_iavf_mac_ipv4_tcp_frag,
-]
-
-tvs_iavf_mac_rss_ipv4_udp = [
-    tv_iavf_mac_ipv4_udp,
-    tv_iavf_mac_ipv4_udp_frag,
-]
-
-tvs_iavf_mac_rss_ipv4_sctp = [
-    tv_iavf_mac_ipv4_sctp,
-    tv_iavf_mac_ipv4_sctp_frag,
-]
-
-tvs_iavf_mac_rss_ipv6 = [
-    tv_iavf_mac_ipv6_l3_src,
-    tv_iavf_mac_ipv6_l3_src_frag,
-    tv_iavf_mac_ipv6_l3_dst,
-    tv_iavf_mac_ipv6_pay,
-    # tv_iavf_mac_ipv6_sctp_pay,
-]
-
-tvs_iavf_mac_rss_ipv6_udp = [
-    tv_iavf_mac_ipv6_udp,
-    tv_iavf_mac_ipv6_udp_frag,
-]
-
-tvs_iavf_mac_rss_ipv6_tcp = [
-    tv_iavf_mac_ipv6_tcp,
-    tv_iavf_mac_ipv6_tcp_frag,
-]
-
-tvs_iavf_mac_rss_cvlan = [
-    tv_iavf_mac_cvlan_rss,
-]
-
-tvs_iavf_mac_rss_pfcp = [
-    tv_iavf_mac_ipv4_pfcp_session,
-    tv_iavf_mac_ipv6_pfcp_session,
-]
-
-tvs_iavf_gtpu_ipv4 = [
-    tv_iavf_gtpu_ipv4_up_match_dismatch,
-    tv_iavf_gtpu_ipv4_down_match_dismatch,
-]
-
-tvs_iavf_gtpu_ipv4_frag = [
-    tv_iavf_gtpu_ipv4_frag_up_match_dismatch,
-    tv_iavf_gtpu_ipv4_frag_down_match_dismatch,
-]
-
-tvs_iavf_gtpu_ipv4_udp = [
-    tv_iavf_gtpu_ipv4_udp_up_match_dismatch,
-    tv_iavf_gtpu_ipv4_udp_down_match_dismatch,
-]
-
-tvs_iavf_gtpu_ipv4_tcp = [
-    tv_iavf_gtpu_ipv4_tcp_up_match_dismatch,
-    tv_iavf_gtpu_ipv4_tcp_down_match_dismatch,
-]
-
-tvs_iavf_gtpu_ipv4_icmp = [
-    tv_iavf_gtpu_ipv4_icmp_up_match_dismatch,
-    tv_iavf_gtpu_ipv4_icmp_down_match_dismatch,
-]
-
-tvs_iavf_gtpu_ipv4_sctp = [
-    tv_iavf_gtpu_ipv4_sctp_up_match_dismatch,
-    tv_iavf_gtpu_ipv4_sctp_down_match_dismatch,
-]
-
-tvs_check_pf_vf_inputset = [
-    tv_mac_ipv4_tcp_inputset,
-    tv_mac_ipv4_udp_inputset,
-    tv_mac_ipv4_sctp_inputset,
-    tv_mac_ipv6_tcp_inputset,
-    tv_mac_ipv6_udp_inputset,
-    tv_mac_ipv6_sctp_inputset,
-]
-
-tvs_iavf_mac_rss_ipv4_l2tpv3 = [tv_iavf_mac_ipv4_l2tpv3]
-
-tvs_iavf_mac_rss_ipv6_l2tpv3 = [tv_iavf_mac_ipv6_l2tpv3]
-
-tvs_iavf_mac_rss_ipv4_esp = [tv_iavf_mac_ipv4_esp]
-
-tvs_iavf_mac_rss_ipv6_esp = [tv_iavf_mac_ipv6_esp]
-
-tvs_iavf_mac_rss_ipv4_ah = [tv_iavf_mac_ipv4_ah]
-
-tvs_iavf_mac_rss_ipv6_ah = [tv_iavf_mac_ipv6_ah]
+mac_ipv6_udp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv6_udp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+}
 
+mac_ipv6_udp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv6_udp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+}
+
+mac_ipv6_udp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv6_udp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+}
+
+mac_ipv6_udp_l4_src = {
+    'sub_casename': 'mac_ipv6_udp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+}
+
+mac_ipv6_udp_l4_dst = {
+    'sub_casename': 'mac_ipv6_udp_l4_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+}
+
+mac_ipv6_udp_all = {
+    'sub_casename': 'mac_ipv6_udp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'save_hash': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv6-udp'],
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_udp_toeplitz_basic_pkt['ipv4_udp_vxlan_ipv6_udp'],
+        #     'action': {'check_hash_different': 'ipv4_udp_vxlan_ipv6_udp'},
+        # },
+    ],
+}
+# mac_ipv6_tcp
+mac_ipv6_tcp_l2_src = {
+    'sub_casename': 'mac_ipv6_tcp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+    ],
+}
+
+mac_ipv6_tcp_l2_dst = {
+    'sub_casename': 'mac_ipv6_tcp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+    ],
+}
+
+mac_ipv6_tcp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv6_tcp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+    ],
+}
+
+mac_ipv6_tcp_l3_src = {
+    'sub_casename': 'mac_ipv6_tcp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+}
+
+mac_ipv6_tcp_l3_dst = {
+    'sub_casename': 'mac_ipv6_tcp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+}
+
+mac_ipv6_tcp_l3src_l4src = {
+    'sub_casename': 'mac_ipv6_tcp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+}
+
+mac_ipv6_tcp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv6_tcp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+}
+
+mac_ipv6_tcp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv6_tcp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+}
+
+mac_ipv6_tcp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv6_tcp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+}
+
+mac_ipv6_tcp_l4_src = {
+    'sub_casename': 'mac_ipv6_tcp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+}
+
+mac_ipv6_tcp_l4_dst = {
+    'sub_casename': 'mac_ipv6_tcp_l4_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+}
+
+mac_ipv6_tcp_all = {
+    'sub_casename': 'mac_ipv6_tcp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'save_hash': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv6-tcp'],
+            'action': {'check_hash_different': 'ipv6-tcp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_tcp_toeplitz_basic_pkt['ipv4_tcp_vxlan_ipv6_tcp'],
+        #     'action': {'check_hash_different': 'ipv4_tcp_vxlan_ipv6_tcp'},
+        # },
+    ],
+}
+# mac_ipv6_sctp
+mac_ipv6_sctp_l2_src = {
+    'sub_casename': 'mac_ipv6_sctp_l2_src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+    ],
+}
+
+mac_ipv6_sctp_l2_dst = {
+    'sub_casename': 'mac_ipv6_sctp_l2_dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+    ],
+}
+
+mac_ipv6_sctp_l2src_l2dst = {
+    'sub_casename': 'mac_ipv6_sctp_l2src_l2dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+    ],
+}
+
+mac_ipv6_sctp_l3_src = {
+    'sub_casename': 'mac_ipv6_sctp_l3_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+}
+
+mac_ipv6_sctp_l3_dst = {
+    'sub_casename': 'mac_ipv6_sctp_l3_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+}
+
+mac_ipv6_sctp_l3src_l4src = {
+    'sub_casename': 'mac_ipv6_sctp_l3src_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+}
+
+mac_ipv6_sctp_l3src_l4dst = {
+    'sub_casename': 'mac_ipv6_sctp_l3src_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+}
+
+mac_ipv6_sctp_l3dst_l4src = {
+    'sub_casename': 'mac_ipv6_sctp_l3dst_l4src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+}
+
+mac_ipv6_sctp_l3dst_l4dst = {
+    'sub_casename': 'mac_ipv6_sctp_l3dst_l4dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+}
+
+mac_ipv6_sctp_l4_src = {
+    'sub_casename': 'mac_ipv6_sctp_l4_src',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+}
+
+mac_ipv6_sctp_l4_dst = {
+    'sub_casename': 'mac_ipv6_sctp_l4_dst',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+}
+
+mac_ipv6_sctp_all = {
+    'sub_casename': 'mac_ipv6_sctp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / sctp / end actions rss types ipv6-sctp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'save_hash': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv6-sctp'],
+            'action': {'check_hash_different': 'ipv6-sctp'},
+        },
+        # {
+        #     'send_packet': mac_ipv6_sctp_toeplitz_basic_pkt['ipv4_sctp_vxlan_ipv6_sctp'],
+        #     'action': {'check_hash_different': 'ipv4_sctp_vxlan_ipv6_sctp'},
+        # },
+    ],
+}
+# toeplitz related data end
+
+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]
+
+mac_ipv4_udp = [mac_ipv4_udp_l2_src, mac_ipv4_udp_l2_dst, mac_ipv4_udp_l2src_l2dst,
+                mac_ipv4_udp_l3_src, mac_ipv4_udp_l3_dst, mac_ipv4_udp_l3src_l4src,
+                mac_ipv4_udp_l3src_l4dst, mac_ipv4_udp_l3dst_l4src, mac_ipv4_udp_l3dst_l4dst,
+                mac_ipv4_udp_l4_src, mac_ipv4_udp_l4_dst, mac_ipv4_udp_all]
+
+mac_ipv4_tcp = [mac_ipv4_tcp_l2_src, mac_ipv4_tcp_l2_dst, mac_ipv4_tcp_l2src_l2dst,
+                mac_ipv4_tcp_l3_src, mac_ipv4_tcp_l3_dst, mac_ipv4_tcp_l3src_l4src,
+                mac_ipv4_tcp_l3src_l4dst, mac_ipv4_tcp_l3dst_l4src, mac_ipv4_tcp_l3dst_l4dst,
+                mac_ipv4_tcp_l4_src, mac_ipv4_tcp_l4_dst, mac_ipv4_tcp_all]
+
+mac_ipv4_sctp = [mac_ipv4_sctp_l2_src, mac_ipv4_sctp_l2_dst, mac_ipv4_sctp_l2src_l2dst,
+                mac_ipv4_sctp_l3_src, mac_ipv4_sctp_l3_dst, mac_ipv4_sctp_l3src_l4src,
+                mac_ipv4_sctp_l3src_l4dst, mac_ipv4_sctp_l3dst_l4src, mac_ipv4_sctp_l3dst_l4dst,
+                mac_ipv4_sctp_l4_src, mac_ipv4_sctp_l4_dst, mac_ipv4_sctp_all]
+
+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]
+
+mac_ipv6_udp = [mac_ipv6_udp_l2_src, mac_ipv6_udp_l2_dst, mac_ipv6_udp_l2src_l2dst,
+                mac_ipv6_udp_l3_src, mac_ipv6_udp_l3_dst, mac_ipv6_udp_l3src_l4src,
+                mac_ipv6_udp_l3src_l4dst, mac_ipv6_udp_l3dst_l4src, mac_ipv6_udp_l3dst_l4dst,
+                mac_ipv6_udp_l4_src, mac_ipv6_udp_l4_dst, mac_ipv6_udp_all]
+
+mac_ipv6_tcp = [mac_ipv6_tcp_l2_src, mac_ipv6_tcp_l2_dst, mac_ipv6_tcp_l2src_l2dst,
+                mac_ipv6_tcp_l3_src, mac_ipv6_tcp_l3_dst, mac_ipv6_tcp_l3src_l4src,
+                mac_ipv6_tcp_l3src_l4dst, mac_ipv6_tcp_l3dst_l4src, mac_ipv6_tcp_l3dst_l4dst,
+                mac_ipv6_tcp_l4_src, mac_ipv6_tcp_l4_dst, mac_ipv6_tcp_all]
+
+mac_ipv6_sctp = [mac_ipv6_sctp_l2_src, mac_ipv6_sctp_l2_dst, mac_ipv6_sctp_l2src_l2dst,
+                mac_ipv6_sctp_l3_src, mac_ipv6_sctp_l3_dst, mac_ipv6_sctp_l3src_l4src,
+                mac_ipv6_sctp_l3src_l4dst, mac_ipv6_sctp_l3dst_l4src, mac_ipv6_sctp_l3dst_l4dst,
+                mac_ipv6_sctp_l4_src, mac_ipv6_sctp_l4_dst, mac_ipv6_sctp_all]
+
+# symmetric related data start
+mac_ipv4_symmetric = {
+    'sub_casename': 'mac_ipv4_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',
+    'pre-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-nonfrag-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-nonfrag-pre'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-frag-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-frag-pre'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-icmp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-icmp-pre'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-tcp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp-pre'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv4-udp-vlan-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vlan-pre'},
+        # },
+    ],
+    'test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-frag'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-icmp'},
+        },
+        {
+           '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,
+           'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #    '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,
+        #    'action': {'save_hash': 'ipv4-udp-vlan'},
+        # },
+        # {
+        #    '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,
+        #    'action': {'check_hash_same': 'ipv4-udp-vlan'},
+        # },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6'},
+        },
+    ],
+    'post-test': [
+         {
+             '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,
+             'action': {'save_hash': 'ipv4-nonfrag-post'},
+         },
+         {
+             '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,
+             'action': {'check_no_hash_or_different': 'ipv4-nonfrag-post'},
+         },
+         {
+             '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,
+             'action': {'save_hash': 'ipv4-frag-post'},
+         },
+         {
+             '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,
+             'action': {'check_no_hash_or_different': 'ipv4-frag-post'},
+         },
+         {
+             '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,
+             'action': {'save_hash': 'ipv4-icmp-post'},
+         },
+         {
+             '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,
+             'action': {'check_no_hash_or_different': 'ipv4-icmp-post'},
+         },
+         {
+             '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,
+             'action': {'save_hash': 'ipv4-tcp-post'},
+         },
+         {
+             '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,
+             'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},
+         },
+         # {
+         #     '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,
+         #     'action': {'save_hash': 'ipv4-udp-vlan-post'},
+         # },
+         # {
+         #     '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,
+         #     'action': {'check_no_hash_or_different': 'ipv4-udp-vlan-post'},
+         # },
+    ],
+}
+
+mac_ipv4_udp_symmetric = {
+    'sub_casename': 'mac_ipv4_udp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-udp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp-pre'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre-pre'},
+        # },
+    ],
+    'test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-udp'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre'},
+        # },
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre'},
+        # },
+    ],
+    'post-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-udp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv4-udp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv4-udp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv4-udp-post'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'nvgre-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'nvgre-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'nvgre-post'},
+        # },
+    ],
+}
+
+mac_ipv4_tcp_symmetric = {
+    'sub_casename': 'mac_ipv4_tcp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-tcp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-tcp-pre'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-pre'},
+        # },
+    ],
+    'test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-tcp'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-tcp'},
+        # },
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-udp'},
+        # },
+    ],
+    'post-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-tcp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv4-tcp-post'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-tcp-post'},
+        # },
+    ],
+}
+
+mac_ipv4_sctp_symmetric = {
+    'sub_casename': 'mac_ipv4_sctp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-sctp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-sctp-pre'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-pre'},
+        # },
+    ],
+    'test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv4-sctp'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv4-sctp'},
+        # },
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-sctp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv4-sctp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv4-sctp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv4-sctp-post'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv4-sctp-post'},
+        # },
+    ],
+}
+
+mac_ipv6_symmetric = {
+    'sub_casename': 'mac_ipv6_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / end actions rss func symmetric_toeplitz types ipv6 end key_len 0 queues end / end',
+    'pre-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-nonfrag-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-nonfrag-pre'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-frag-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-frag-pre'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-icmp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-icmp-pre'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-udp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp-pre'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv6-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv4-udp-vxlan-eth-ipv6-pre'},
+        # },
+    ],
+    'test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-frag'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-icmp'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv6'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'ipv4-udp-vxlan-eth-ipv6'},
+        # },
+        {
+            '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,
+            'action': {'save_hash': 'ipv4-nonfrag'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv4-nonfrag'},
+        },
+    ],
+    'post-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-nonfrag-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv6-nonfrag-post'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-frag-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv6-frag-post'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-icmp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv6-icmp-post'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-udp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv6-udp-post'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv4-udp-vxlan-eth-ipv6-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'ipv4-udp-vxlan-eth-ipv6-post'},
+        # },
+    ],
+}
+
+mac_ipv6_udp_symmetric = {
+    'sub_casename': 'mac_ipv6_udp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-udp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp-pre'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-eth-ipv6-udp-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre-eth-ipv6-udp-pre'},
+        # },
+    ],
+    'test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-udp'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-eth-ipv6-udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre-eth-ipv6-udp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'ipv6-tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'ipv6-tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-eth-ipv6-tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre-eth-ipv6-tcp'},
+        # },
+    ],
+    'post-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-udp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv6-udp-post'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-eth-ipv6-udp-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'nvgre-eth-ipv6-udp-post'},
+        # },
+    ],
+}
+
+mac_ipv6_tcp_symmetric = {
+    'sub_casename': 'mac_ipv6_tcp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-tcp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-tcp-pre'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-eth-ipv6-tcp-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre-eth-ipv6-tcp-pre'},
+        # },
+    ],
+    'test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-tcp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-tcp'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-eth-ipv6-tcp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre-eth-ipv6-tcp'},
+        # },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'save_hash': 'nvgre-eth-ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'nvgre-eth-ipv6-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-tcp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv6-tcp-post'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-eth-ipv6-tcp-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'nvgre-eth-ipv6-tcp-post'},
+        # },
+    ],
+}
+
+mac_ipv6_sctp_symmetric = {
+    'sub_casename': 'mac_ipv6_sctp_all',
+    'port_id': 0,
+    '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',
+    'pre-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-sctp-pre'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-sctp-pre'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-eth-ipv6-sctp-pre'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_different': 'nvgre-eth-ipv6-sctp-pre'},
+        # },
+    ],
+    'test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-sctp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-sctp'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-eth-ipv6-sctp'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_hash_same': 'nvgre-eth-ipv6-sctp'},
+        # },
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-udp'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-udp'},
+        },
+    ],
+    'post-test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-sctp-post'},
+        },
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv6-sctp-post'},
+        },
+        # {
+        #     '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,
+        #     'action': {'save_hash': 'nvgre-eth-ipv6-sctp-post'},
+        # },
+        # {
+        #     '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,
+        #     'action': {'check_no_hash_or_different': 'nvgre-eth-ipv6-sctp-post'},
+        # },
+    ],
+}
+# symmetric related data end
+
+ipv6_64bit_prefix_l3_src_only = {
+    'sub_casename': 'ipv6_64bit_prefix_l3_src_only',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+    ],
+    'post-test': [
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv6-64bit'},
+        },
+    ],
+}
+
+ipv6_64bit_prefix_l3_dst_only = {
+    'sub_casename': 'ipv6_64bit_prefix_l3_dst_only',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+    ],
+    'post-test': [
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv6-64bit'},
+        },
+    ],
+}
+
+ipv6_64bit_prefix_l3_src_dst_only = {
+    'sub_casename': 'ipv6_64bit_prefix_l3_src_dst_only',
+    'port_id': 0,
+    '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',
+    'test': [
+        {
+            '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,
+            'action': {'save_hash': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_different': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+        {
+            '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,
+            'action': {'check_hash_same': 'ipv6-64bit'},
+        },
+    ],
+    'post-test': [
+        {
+            '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,
+            'action': {'check_no_hash_or_different': 'ipv6-64bit'},
+        },
+    ],
+}
+
+ipv6_64bit_prefix = [ipv6_64bit_prefix_l3_src_only, ipv6_64bit_prefix_l3_dst_only, ipv6_64bit_prefix_l3_src_dst_only]
 
 class AdvancedIavfRSSTest(TestCase):
 
     def set_up_all(self):
         """
         Run at the start of each test suite.
-        Generic filter Prerequistites
+        prerequisites.
         """
+        # Based on h/w type, choose how many ports to use
         self.dut_ports = self.dut.get_ports(self.nic)
-        # Verify that enough ports are available
-        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
-        self.dut_session = self.dut.create_session("pf_dut")
-        self.pmd_session = self.dut.create_session("vf_pmd_dut")
-        self.pmd_output = PmdOutput(self.dut)
-        self.pmd_output_vf1 = PmdOutput(self.dut, self.pmd_session)
-        localPort = self.tester.get_local_port(self.dut_ports[0])
-        self.used_dut_port = self.dut_ports[0]
+        self.verify(len(self.dut_ports) >= 2, "Insufficient ports for testing")
+        # Verify that enough threads are available
+        cores = self.dut.get_core_list("1S/4C/1T")
+        self.verify(cores is not None, "Insufficient cores for speed testing")
         self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
-        self.tx_iface = self.tester.get_interface(localPort)
+        self.tester_port0 = self.tester.get_local_port(self.dut_ports[0])
+        self.tester_port1 = self.tester.get_local_port(self.dut_ports[1])
+        self.tester_iface0 = self.tester.get_interface(self.tester_port0)
+        self.tester_iface1 = self.tester.get_interface(self.tester_port1)
+
+        self.used_dut_port = self.dut_ports[0]
         self.pf_interface = self.dut.ports_info[self.dut_ports[0]]['intf']
-        self.pf_mac = self.dut.get_mac_address(0)
-        self.pf_pci = self.dut.ports_info[self.dut_ports[0]]['pci']
-        self.verify(self.nic in ["columbiaville_25g", "columbiaville_100g"], "%s nic not support ethertype filter" % self.nic)
-        self.ddp_fdir = "/lib/firmware/updates/intel/ice/ddp/"
-        conf_file = 'conf/cvl_advanced_iavf_rss_package.cfg'
-        conf_info = UserConf(conf_file)
-        conf_section = conf_info.conf._sections['suite']
-        self.os_pkg_name = conf_section['os_default_package_file_location']
-        self.comms_pkg_name = conf_section['comms_package_file_location']
         self.vf_flag = False
         self.create_iavf()
 
+        self.pass_flag = 'passed'
+        self.fail_flag = 'failed'
+        self.pkt = Packet()
+        self.pmd_output = PmdOutput(self.dut)
+        self.launch_testpmd()
+        self.rxq = 16
+        self.rssprocess = RssProcessing(self, self.pmd_output, [self.tester_iface0, self.tester_iface1], self.rxq)
+        self.logger.info('rssprocess.tester_ifaces: {}'.format(self.rssprocess.tester_ifaces))
+        self.logger.info('rssprocess.test_case: {}'.format(self.rssprocess.test_case))
+
     def set_up(self):
         """
         Run before each test case.
         """
-        self.dut.kill_all()
-
-    def tear_down(self):
-        """
-        Run after each test case.
-        """
-        self.dut.kill_all()
-        if self.running_case == "test_vf_reset":
-            self.dut.send_expect("ip link set %s vf 0 trust off" % self.pf_interface, "# ")
-            self.dut.send_expect("ip link set %s vf 0 mac %s" % (self.pf_interface, vf0_mac), "# ")
-        elif self.running_case == "test_pf_reset":
-            self.dut.send_expect("ip link set %s vf 0 mac %s" % (self.pf_interface, vf0_mac), "# ")
-
-    def tear_down_all(self):
-        """
-        Run after each test suite.
-        """
-        self.dut.kill_all()
-        self.destroy_iavf()
+        self.pmd_output.execute_cmd("start")
 
     def create_iavf(self):
 
         if self.vf_flag is False:
             self.dut.bind_interfaces_linux('ice')
-            self.dut.generate_sriov_vfs_by_port(self.used_dut_port, 2)
+            self.dut.generate_sriov_vfs_by_port(self.used_dut_port, 1)
             self.sriov_vfs_port = self.dut.ports_info[self.used_dut_port]['vfs_port']
             self.vf_flag = True
 
@@ -812,10 +5109,8 @@ class AdvancedIavfRSSTest(TestCase):
                     port.bind_driver(self.drivername)
 
                 self.vf0_prop = {'opt_host': self.sriov_vfs_port[0].pci}
-                self.vf1_prop = {'opt_host': self.sriov_vfs_port[1].pci}
                 self.dut.send_expect("ifconfig %s up" % self.pf_interface, "# ")
                 self.dut.send_expect("ip link set %s vf 0 mac %s" % (self.pf_interface, vf0_mac), "# ")
-                self.dut.send_expect("ip link set %s vf 1 mac %s" % (self.pf_interface, vf1_mac), "# ")
             except Exception as e:
                 self.destroy_iavf()
                 raise Exception(e)
@@ -825,344 +5120,302 @@ class AdvancedIavfRSSTest(TestCase):
             self.dut.destroy_sriov_vfs_by_port(self.used_dut_port)
             self.vf_flag = False
 
-    def create_testpmd_command(self, port_info, pmd_param=None):
-        """
-        Create testpmd command for non-pipeline mode
-        """
-        port_pci = port_info['opt_host']
-        param_str = " --rxq=16 --txq=16 --port-topology=loop "
-        if pmd_param is not None:
-            param_str = param_str + pmd_param
-        self.pmd_output.start_testpmd(cores="1S/8C/1T", param=param_str, eal_param="-w %s" % port_pci)
-        self.pmd_output.execute_cmd("set fwd rxonly", "testpmd> ", 15)
-        self.pmd_output.execute_cmd("set verbose 1", "testpmd> ", 15)
-        self.pmd_output.execute_cmd("port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd", "testpmd> ", 15)
-
-    def create_testpmd2_command(self, port_info, pmd_param=None):
-        """
-        Create testpmd command for non-pipeline mode
-        """
-        self.pmd_session.send_expect("cd /root/dpdk/", "# ")
-        port_pci = port_info['opt_host']
-        param_str = " --rxq=16 --txq=16 --port-topology=loop "
-        if pmd_param is not None:
-            param_str = param_str + pmd_param
-        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)
-        self.pmd_output_vf1.execute_cmd("set fwd rxonly", "testpmd> ", 15)
-        self.pmd_output_vf1.execute_cmd("set verbose 1", "testpmd> ", 15)
-
-    def _rte_flow_validate_pattern(self, test_vectors, rss_match=True):
-        check_result = 0
-        test_results = []
-        log_msg = []
-        for tv in test_vectors:
-            self.pmd_output.execute_cmd(tv["rte_flow_pattern"])  # create a rule
-            time.sleep(1)
-            self.pkg_count = tv["send_count"]
-            # send packet
-            if "match" in tv["name"]:
-                for match_pkg in tv["match_str"]:
-                    out = self._pkg_send(match_pkg, self.pkg_count)
-                    result, case_msg = tv["check_func"](out, self.pkg_count)
-                    print(case_msg)
-                    test_results.append(result)
-                for dismatch_pkg in tv["dismatch_str"]:
-                    out = self._pkg_send(dismatch_pkg, self.pkg_count)
-                    result, case_msg = tv["check_func"](out, self.pkg_count, rss_match=False)
-                    print(case_msg)
-                    test_results.append(result)
-            else:
-                for scapy_str in tv["scapy_str"]:
-                    out = self._pkg_send(scapy_str, self.pkg_count)
-                    result, case_msg = tv["check_func"](out, self.pkg_count, rss_match)
-                    print(case_msg)
-                    test_results.append(result)
-            self.pmd_output.execute_cmd("flow destroy 0 rule 0")
-
-            # check test results
-            if False in test_results:
-                log_cmd = "%s test failed" % tv["name"]
-                check_result = check_result + 1
-            else:
-                log_cmd = "%s test PASS" % tv["name"]
-            log_msg.append(log_cmd)
-
-        self.pmd_output.execute_cmd("flow flush 0")
-        self.pmd_output.quit()
-        print(log_msg)
-        self.verify(check_result == 0, "Some test case failed.")
-
-    def _check_inputset_pattern(self, test_vectors):
-        for tv in test_vectors:
-            self.pmd_output.execute_cmd(tv["rte_flow_pattern"])  # create a rule
-            self.dut_session.send_expect("ethtool -N %s %s" % (self.pf_interface, tv["pf_rule"]), "# ")
-            self.dut_session.send_expect("ethtool -n %s %s" % (self.pf_interface, tv["check_pf_rule_set"]), "# ")
-            self._set_pf_queue_num()
-            self.pkg_count = tv["send_count"]
-            # send vf packet
-            for scapy_str in tv["scapy_str"]:
-                pf_rx_0 = self._get_pf_rx()
-                out = self._pkg_send(scapy_str, self.pkg_count)
-                result, case_msg = tv["check_func"](out, self.pkg_count)
-                self.verify(result, case_msg)
-                # check PF not recieve packets
-                pf_rx_1 = self._get_pf_rx()
-                pf_rx = (pf_rx_1 - pf_rx_0)
-                self.verify(pf_rx == 0, "pf recieve vf packets!")
-
-            # send pf packet
-            for pf_scapy_str in tv["pf_scapy"]:
-                pf_scapy_str = pf_scapy_str % self.pf_mac
-                self._pkg_send(pf_scapy_str, self.pkg_count)
-                out = self.dut_session.send_expect("ethtool -S %s |grep rx_queue" % self.pf_interface, "# ")
-                result = tv["check_pf_rss_func"](out, self.pkg_count)
-                self.verify(result, "PF not do hash")
-            self.pmd_output.execute_cmd("flow destroy 0 rule 0")
-
-        self.pmd_output.execute_cmd("flow flush 0")
-        self.pmd_output.quit()
-
-    def _pkg_send(self, test_packet, send_count):
-        self.pmd_output.execute_cmd("start")
-        pkt = Packet()
-        for i in range(send_count):
-            pkt.append_pkt(test_packet)
-        pkt.send_pkt(self.tester, tx_port=self.tx_iface, count=1)
-        out = self.pmd_output.execute_cmd("stop", timeout=30)
-        return out
-
-    def _set_pf_queue_num(self):
-        self.dut_session.send_expect("ethtool -L %s rx 10 tx 10" % self.pf_interface, "# ")
-        out = self.dut_session.send_expect("ethtool -l %s " % self.pf_interface, "# ")
-        out = out.split("Current hardware settings")[1]
-        pf_queue_num = re.findall(r'Combined:\s+(\d+)', out)[0]
-        self.verify(int(pf_queue_num) == 10, "set rx tx queue fail!")
-
-    def _get_pf_rx(self):
-        out = self.dut_session.send_expect("ethtool -l %s " % self.pf_interface, "# ")
-        out = out.split("Current hardware settings")[1]
-        pf_rx = re.findall(r'RX:\s+(\d+)', out)[0]
-        return int(pf_rx)
-
-    def test_iavf_mac_eth_src_rss(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_eth_src)
-
-    def test_iavf_mac_eth_dst_rss(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_eth_dst, rss_match=False)
-
-    def test_iavf_rss_ipv4(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4)
-
-    def test_iavf_rss_ipv4_ICMP(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_icmp)
-
-    def test_iavf_rss_ipv4_NVGRE(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_nvgre)
-
-    def test_iavf_rss_ipv4_TCP(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_tcp)
-
-    def test_iavf_rss_ipv4_UDP(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_udp)
-
-    # def test_iavf_rss_ipv4_SCTP(self):
-    #     self.create_testpmd_command(self.vf0_prop)
-    #     self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_sctp)
-
-    def test_iavf_rss_ipv6(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6)
-
-    def test_iavf_rss_ipv6_UDP(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6_udp)
-
-    def test_iavf_rss_ipv6_TCP(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6_tcp)
-
-    def test_iavf_rss_CVLAN(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_cvlan)
-
-    def test_iavf_rss_PFCP(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_pfcp)
-
-    def test_iavf_ipv4_gtpu_updown(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4)
-
-    def test_iavf_ipv4_frag_gtpu_updown(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4_frag)
-
-    def test_iavf_ipv4_udp_gtpu_updown(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4_udp)
-
-    def test_iavf_ipv4_tcp_gtpu_updown(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4_tcp)
-
-    def test_iavf_ipv4_icmp_gtpu_updown(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4_icmp)
-
-    def test_iavf_rss_ipv4_l2tpv3(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_l2tpv3)
-
-    def test_iavf_rss_ipv6_l2tpv3(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6_l2tpv3)
-
-    def test_iavf_rss_ipv4_esp(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_esp)
-
-    def test_iavf_rss_ipv6_esp(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6_esp)
-
-    def test_iavf_rss_ipv4_ah(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv4_ah)
-
-    def test_iavf_rss_ipv6_ah(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._rte_flow_validate_pattern(tvs_iavf_mac_rss_ipv6_ah)
-
-    # def test_iavf_ipv4_sctp_gtpu_updown(self):
-    #     self.create_testpmd_command(self.vf0_prop)
-    #     self._rte_flow_validate_pattern(tvs_iavf_gtpu_ipv4_sctp)
-
-    def test_iavf_error_handle(self):
-        self.create_testpmd_command(self.vf0_prop)
-        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',
-                      'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end']
-        for rule in error_rule:
-            out = self.pmd_output.execute_cmd(rule)
-            self.verify("Failed to create flow" in out, "Rule can be created")
-
-    def test_vf_reset(self):
-        self.dut_session.send_expect("ip link set %s vf 0 trust on" % self.pf_interface, "# ")
-        self.create_testpmd_command(self.vf0_prop, pmd_param="--nb-cores=2")
-        flow_rule = "flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end"
-        self.pmd_output.execute_cmd(flow_rule)
-        self.pmd_output.execute_cmd("show port 0 rss-hash")
-
-        # send packets with vf0_mac, check hash work
-        pkg = 'Ether(dst="%s")/IP(dst=RandIP(), frag=5)/SCTP(sport=RandShort())/("X"*480)' % vf0_mac
-        pkg_count = 100
-        out = self._pkg_send(pkg, pkg_count)
-        result, log_str = rfc.check_iavf_packets_rss_queue(out, pkg_count)
-        self.verify(result is True, log_str)
-
-        # reset vf
-        self.pmd_output.execute_cmd("port stop 0")
-        self.pmd_output.execute_cmd("port reset 0")
-        self.pmd_output.execute_cmd("port start 0")
-        # send packets again with vf0_mac, check not do hash
-        out = self._pkg_send(pkg, pkg_count)
-        result, log_str = rfc.check_iavf_packets_rss_queue(out, pkg_count)
-        self.verify(result is True, log_str)
-
-        # reset PF and send packets check hash work
-        reset_mac = "00:66:77:88:99:55"
-        self.dut_session.send_expect("ip link set %s vf 0 mac %s" % (self.pf_interface, reset_mac), "# ")
-        self.pmd_output.execute_cmd("port stop 0")
-        self.pmd_output.execute_cmd("port reset 0")
-        self.pmd_output.execute_cmd("port start 0")
-        pkg = 'Ether(dst="%s")/IP(dst=RandIP(), frag=5)/SCTP(sport=RandShort())/("X"*480)' % reset_mac
-        out = self._pkg_send(pkg, pkg_count)
-        result, log_str = rfc.check_iavf_packets_rss_queue(out, pkg_count)
-        self.verify(result is True, log_str)
-
-    def test_pf_reset(self):
-        param_str = " --rxq=16 --txq=16 --nb-cores=2"
-        self.pmd_output.start_testpmd(cores="1S/8C/1T", param=param_str,
-                                      eal_param="-w %s -w %s" % (self.vf0_prop['opt_host'], self.vf1_prop['opt_host']))
-        self.pmd_output.execute_cmd("set fwd rxonly", "testpmd> ", 15)
-        self.pmd_output.execute_cmd("set verbose 1", "testpmd> ", 15)
-        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"
-        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"
-        self.pmd_output.execute_cmd(vf0_rule)
-        self.pmd_output.execute_cmd(vf1_rule)
-        pkg_count = 100
-
-        # send packets with vf0_mac and vf1_mac, check hash work
-        pkg_vf0 = 'Ether(dst="%s")/IP(src=RandIP())/UDP(dport=RandShort())/("X"*480)' % vf0_mac
-        pkg_vf1 = 'Ether(dst="%s")/IP(dst=RandIP())/UDP(sport=RandShort())/("X"*480)' % vf1_mac
-
-        out = self._pkg_send(pkg_vf0, pkg_count)
-        result, msg = rfc.check_iavf_packets_rss_queue(out, pkg_count)
-        self.verify(result is True, msg)
-        out = self._pkg_send(pkg_vf1, pkg_count)
-        result, msg = rfc.check_iavf_packets_rss_queue(out, pkg_count)
-        self.verify(result is True, msg)
-
-        # PF reset and check hash not do hash
-        reset_mac = "00:66:77:88:99:55"
-        self.dut_session.send_expect("ip link set %s vf 0 mac %s" % (self.pf_interface, reset_mac), "# ")
-        reset_vf0 = 'Ether(dst="%s")/IP(src=RandIP())/UDP(dport=RandShort())/("X"*480)' % reset_mac
-        out = self._pkg_send(reset_vf0, pkg_count)
-        out = out.split("forward statistics for all ports")[1]
-        rx_num = re.findall(r'RX-packets:\s?(\d+)', out)[0]
-        self.verify(int(rx_num) == 0, "PF reset error")
-
-        out = self._pkg_send(pkg_vf1, pkg_count)
-        result, msg = rfc.check_iavf_packets_rss_queue(out, pkg_count)
-        self.verify(result is True, msg)
-
-    def test_mutil_vfs(self):
-        self.create_testpmd_command(self.vf0_prop, pmd_param="--nb-cores=2")
-        self.create_testpmd2_command(self.vf1_prop, pmd_param="--nb-cores=2")
-        pkg_count = 100
-
-        flow_rule = "flow create 0 ingress pattern eth / ipv4 / end actions rss types l3-dst-only end key_len 0 queues end / end"
-        self.pmd_output.execute_cmd(flow_rule)
-        self.pmd_output_vf1.execute_cmd(flow_rule)
-        # send packets and check vf0 not recieved, vf1 hash do work
-        pkg_vf1 = 'Ether(dst="%s")/IP(dst=RandIP(), frag=5)/SCTP(sport=RandShort())/("X"*480)' % vf1_mac
-        self.pmd_output_vf1.execute_cmd("start")
-        self._pkg_send(pkg_vf1, pkg_count)
-        vf1_out = self.pmd_output_vf1.execute_cmd("stop")
-        result, msg = rfc.check_iavf_packets_rss_queue(vf1_out, pkg_count)
-        self.verify(result is True, msg)
-
-    def test_check_inputset_with_pf_and_vf(self):
-        self.create_testpmd_command(self.vf0_prop)
-        self._check_inputset_pattern(tvs_check_pf_vf_inputset)
-
-    def test_use_os_default_package(self):
-
-        self.replace_pkg(self.os_pkg_name)
-        self.create_testpmd_command(self.vf0_prop)
-        error_rule = ["flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end ",
-                      "flow create 0 ingress pattern eth / ipv6 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end ", ]
-        try:
-            for rule in error_rule:
-                out = self.pmd_output.execute_cmd(rule)
-                self.verify("Failed to create flow" in out, "Rule can be created")
-        except Exception as e:
-            raise Exception(e)
-        finally:
-            self.pmd_output.quit()
-            self.replace_pkg(self.comms_pkg_name)
-
-    def replace_pkg(self, pkg):
-        self.dut_session.send_expect("cd %s" % self.ddp_fdir, "# ")
-        self.dut_session.send_expect("rm -f ice.pkg", "# ")
-        self.dut_session.send_expect("cp %s ice.pkg" % pkg, "# ")
-        self.dut_session.send_expect("rmmod ice", "# ", 15)
-        self.dut_session.send_expect("modprobe ice", "# ", 60)
-        self.vf_flag = False
-        self.create_iavf()
+    def launch_testpmd(self):
+        param = "--rxq=16 --txq=16"
+        self.pmd_output.start_testpmd(cores="1S/4C/1T", param=param,
+                                            ports=[self.sriov_vfs_port[0].pci], socket=self.ports_socket)
+        self.pmd_output.execute_cmd("port config all rss all")
+        self.pmd_output.execute_cmd("set fwd rxonly")
+        self.pmd_output.execute_cmd("set verbose 1")
+        res = self.pmd_output.wait_link_status_up('all', timeout=15)
+        self.verify(res is True, 'there have port link is down')
+
+    def test_mac_ipv4(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4)
+
+    def test_mac_ipv4_udp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_udp)
+
+    def test_mac_ipv4_tcp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_tcp)
+
+    def test_mac_ipv4_sctp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_sctp)
+
+    def test_mac_ipv6(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6)
+
+    def test_mac_ipv6_udp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_udp)
+
+    def test_mac_ipv6_tcp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_tcp)
+
+    def test_mac_ipv6_sctp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_sctp)
+
+    def test_symmetric_mac_ipv4(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_symmetric)
+
+    def test_symmetric_mac_ipv4_udp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_udp_symmetric)
+
+    def test_symmetric_mac_ipv4_tcp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_tcp_symmetric)
+
+    def test_symmetric_mac_ipv4_sctp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_sctp_symmetric)
+
+    def test_symmetric_mac_ipv6(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_symmetric)
+
+    def test_symmetric_mac_ipv6_udp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_udp_symmetric)
+
+    def test_symmetric_mac_ipv6_tcp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_tcp_symmetric)
+
+    def test_symmetric_mac_ipv6_sctp(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_sctp_symmetric)
+
+    def test_64bit_ipv6_prefix(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_64bit_prefix)
+
+    def test_negative_case(self):
+        negative_rules = [
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l3-src-only end key_len 0 queues end / end',
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4-udp end key_len 0 queues end / end',
+            'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end',
+            'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end',
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv6 end key_len 0 queues end / end',
+            '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',
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss func symmetric_toeplitz types eth end key_len 0 queues end / end',
+        ]
+        for i in negative_rules:
+            out = self.pmd_output.execute_cmd(i, timeout=1)
+            self.verify('iavf_flow_create(): Failed to create flow' in out, "rule %s create successfully" % i)
+
+    def test_multirules(self):
+        # Subcase 1: two rules with same pattern but different hash input set, not hit default profile
+        self.logger.info('===================Test sub case: multirules subcase 1 ================')
+        self.rssprocess.error_msgs = []
+        rule_id_0 = self.rssprocess.create_rule(
+            'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end',
+            check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)
+        tests = [
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)' % vf0_mac,
+                'action': {'save_hash': 'ipv4-udp'},
+            },
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)' % vf0_mac,
+                'action': {'check_hash_different': 'ipv4-udp'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests, 0)
+        rule_id_1 = self.rssprocess.create_rule(
+            'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',
+            check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)
+        tests = [
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)' % vf0_mac,
+                'action': {'save_hash': 'ipv4-udp'},
+            },
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.7",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)' % vf0_mac,
+                'action': {'check_hash_same': 'ipv4-udp'},
+            },
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.3",dst="192.168.0.7")/UDP(dport=45)/Raw("x"*480)' % vf0_mac,
+                'action': {'check_hash_different': 'ipv4-udp'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)
+        self.rssprocess.check_rule(port_id=0)
+        tests = [
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=45)/Raw("x"*480)' % vf0_mac,
+                'action': {'save_hash': 'ipv4-udp'},
+            },
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.3",dst="192.168.0.9")/UDP(dport=45)/Raw("x"*480)' % vf0_mac,
+                'action': {'check_hash_different': 'ipv4-udp'},
+            },
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.7",dst="192.168.0.9")/UDP(dport=45)/Raw("x"*480)' % vf0_mac,
+                'action': {'check_hash_different': 'ipv4-udp'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests, 0)
+        #self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)
+        self.rssprocess.handle_tests(tests, 0)
+        self.dut.send_command("flow flush 0", timeout=1)
+
+        # Subcase 2: two rules with same pattern but different hash input set, hit default profile
+        self.logger.info('===================Test sub case: multirules subcase 2 ================')
+        rule_id_0 = self.rssprocess.create_rule(
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',
+            check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)
+        tests = [
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*480)' % vf0_mac,
+                'action': {'save_hash': 'ipv4-pay'},
+            },
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.7",dst="192.168.0.5")/Raw("x"*480)' % vf0_mac,
+                'action': {'check_hash_different': 'ipv4-pay'},
+            },
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.3",dst="192.168.0.8")/Raw("x"*480)' % vf0_mac,
+                'action': {'check_hash_same': 'ipv4-pay'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests, 0)
+        rule_id_1 = self.rssprocess.create_rule(
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',
+            check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)
+        tests = [
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*480)' % vf0_mac,
+                'action': {'save_hash': 'ipv4-pay'},
+            },
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.7",dst="192.168.0.5")/Raw("x"*480)' % vf0_mac,
+                'action': {'check_hash_same': 'ipv4-pay'},
+            },
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.3",dst="192.168.0.7")/Raw("x"*480)' % vf0_mac,
+                'action': {'check_hash_different': 'ipv4-pay'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)
+        self.rssprocess.check_rule(port_id=0)
+        tests = [
+            {
+                'send_packet': 'Ether(dst="%s")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*480)' % vf0_mac,
+                'action': {'check_no_hash': 'ipv4-pay'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests, 0)
+        #self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)
+        self.dut.send_command("flow flush 0", timeout=1)
+
+        # Subcase 3: two rules, scope smaller created first, and the larger one created later
+        self.logger.info('===================Test sub case: multirules subcase 3 ================')
+        rule_id_0 = self.rssprocess.create_rule(
+            'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',
+            check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)
+        tests_3 = [
+            {
+                '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,
+                'action': {'save_hash': 'ipv4-udp-pay'},
+            },
+            {
+                '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,
+                'action': {'check_hash_different': 'ipv4-udp-pay'},
+            },
+            {
+                '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,
+                'action': {'check_hash_same': 'ipv4-udp-pay'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests_3, 0)
+        rule_id_1 = self.rssprocess.create_rule(
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',
+            check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)
+        tests = [
+            {
+                '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,
+                'action': {'save_hash': 'ipv4-udp-pay'},
+            },
+            {
+                '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,
+                'action': {'check_hash_different': 'ipv4-udp-pay'},
+            },
+            {
+                '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,
+                'action': {'check_hash_same': 'ipv4-udp-pay'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)
+        self.rssprocess.handle_tests(tests_3, 0)
+        #self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)
+        tests = [
+            {
+                '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,
+                'action': {'check_no_hash': 'ipv4-udp-pay'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.dut.send_command("flow flush 0", timeout=1)
+
+        # Subcase 4: two rules, scope larger created first, and the smaller one created later
+        self.logger.info('===================Test sub case: multirules subcase 4 ================')
+        rule_id_0 = self.rssprocess.create_rule(
+            'flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',
+            check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_0)
+        tests_4 = [
+            {
+                '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,
+                'action': {'save_hash': 'ipv4-udp-pay'},
+            },
+            {
+                '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,
+                'action': {'check_hash_different': 'ipv4-udp-pay'},
+            },
+            {
+                '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,
+                'action': {'check_hash_same': 'ipv4-udp-pay'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests_4, 0)
+        rule_id_1 = self.rssprocess.create_rule(
+            'flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',
+            check_stats=True)
+        self.rssprocess.check_rule(port_id=0, rule_list=rule_id_1)
+        tests = [
+            {
+                '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,
+                'action': {'save_hash': 'ipv4-udp-pay'},
+            },
+            {
+                '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,
+                'action': {'check_hash_different': 'ipv4-udp-pay'},
+            },
+            {
+                '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,
+                'action': {'check_hash_same': 'ipv4-udp-pay'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_1)
+        self.rssprocess.handle_tests(tests_4, 0)
+        #self.rssprocess.destroy_rule(port_id=0, rule_id=rule_id_0)
+        tests = [
+            {
+                '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,
+                'action': {'check_no_hash': 'ipv4-udp-pay'},
+            },
+        ]
+        self.rssprocess.handle_tests(tests, 0)
+        self.verify(not self.rssprocess.error_msgs, 'some subcases failed')
+
+    def tear_down(self):
+        # destroy all flow rule on port 0
+        self.dut.send_command("flow flush 0", timeout=1)
+        self.dut.send_command("clear port stats all", timeout=1)
+        self.pmd_output.execute_cmd("stop")
+
+    def tear_down_all(self):
+        self.dut.kill_all()
+        self.destroy_iavf()
-- 
2.17.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [dts] [PATCH V4 4/8] tests/cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp
  2020-11-03  8:36 [dts] [PATCH V4 0/8] tests: update or add rss related suites Haiyang Zhao
                   ` (2 preceding siblings ...)
  2020-11-03  8:36 ` [dts] [PATCH V4 3/8] tests/TestSuite_cvl_advanced_iavf_rss:update script Haiyang Zhao
@ 2020-11-03  8:36 ` Haiyang Zhao
  2020-11-03 10:02   ` Sun, QinX
  2020-11-03  8:36 ` [dts] [PATCH V4 5/8] conf/cvl_advanced_rss_pppoe Haiyang Zhao
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 16+ messages in thread
From: Haiyang Zhao @ 2020-11-03  8:36 UTC (permalink / raw)
  To: dts, qi.fu; +Cc: sunqin

From: sunqin <qinx.sun@intel.com>

add cvl rss pf test suite

Signed-off-by: sunqin <qinx.sun@intel.com>
---
 ...dvanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp.py | 5461 +++++++++++++++++
 1 file changed, 5461 insertions(+)
 create mode 100644 tests/TestSuite_cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp.py

diff --git a/tests/TestSuite_cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp.py b/tests/TestSuite_cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp.py
new file mode 100644
index 0000000..a9551b6
--- /dev/null
+++ b/tests/TestSuite_cvl_advanced_rss_pppoe_vlan_esp_ah_l2tp_pfcp.py
@@ -0,0 +1,5461 @@
+# BSD LICENSE
+#
+# Copyright(c)2020 Intel Corporation. All rights reserved.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   * Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in
+#     the documentation and/or other materials provided with the
+#     distribution.
+#   * Neither the name of Intel Corporation nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+import re
+import random
+import string
+from test_case import TestCase
+from pmd_output import PmdOutput
+from packet import Packet
+from rte_flow_common import RssProcessing
+from config import UserConf
+
+mac_ipv4_pfcp_session_packets = {
+    'match': [
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=2)/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:54")/IP(src="192.168.0.25",dst="192.168.0.23")/UDP(sport=23,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)'],
+    'mismatch': [
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=22,dport=25)/Raw("x"*80)']
+}
+
+mac_ipv4_pfcp_session = {
+    'sub_casename': 'mac_ipv4_pfcp_session',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_pfcp_session_packets['match'][0],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_pfcp_session_packets['match'][1],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_pfcp_session_packets['match'][2],
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': [i for i in mac_ipv4_pfcp_session_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_ipv4_pfcp_session_packets['match']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_pfcp_session_packets = {
+    'match': [
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=2)/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(sport=23,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)'],
+    'mismatch': [
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=22,dport=8805)/PFCP(Sfield=1, SEID=1)/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=25)/Raw("x"*80)']
+}
+
+mac_ipv6_pfcp_session = {
+    'sub_casename': 'mac_ipv6_pfcp_session',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_pfcp_session_packets['match'][0],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv6_pfcp_session_packets['match'][1],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv6_pfcp_session_packets['match'][2],
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': [i for i in mac_ipv6_pfcp_session_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_ipv6_pfcp_session_packets['match']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_l2tpv3_packets = {
+    'match': [
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5", proto=115)/L2TP(\'\\x00\\x00\\x00\\x11\')/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.4", proto=115)/L2TP(\'\\x00\\x00\\x00\\x12\')/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.5",dst="192.168.0.7", proto=115)/L2TP(\'\\x00\\x00\\x00\\x11\')/Raw("x"*480)'
+    ],
+    'mismatch': [
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=115)/L2TP(\'\\x00\\x00\\x00\\x11\')/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=22,dport=25)/Raw("x"*80)'
+    ]
+}
+
+mac_ipv4_l2tpv3 = {
+    'sub_casename': 'mac_ipv4_l2tpv3',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_l2tpv3_packets['match'][0],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_l2tpv3_packets['match'][1],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_l2tpv3_packets['match'][2],
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': [i for i in mac_ipv4_l2tpv3_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_ipv4_l2tpv3_packets['match']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_l2tpv3_packets = {
+    'match': [
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=115)/L2TP(\'\\x00\\x00\\x00\\x11\')/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=115)/L2TP(\'\\x00\\x00\\x00\\x12\')/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023", nh=115)/L2TP(\'\\x00\\x00\\x00\\x11\')/Raw("x"*480)'
+    ],
+    'mismatch': [
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5", proto=115)/L2TP(\'\\x00\\x00\\x00\\x11\')/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=22,dport=25)/Raw("x"*80)'
+    ]
+}
+
+mac_ipv6_l2tpv3 = {
+    'sub_casename': 'mac_ipv6_l2tpv3',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_l2tpv3_packets['match'][0],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv6_l2tpv3_packets['match'][1],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv6_l2tpv3_packets['match'][2],
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': [i for i in mac_ipv6_l2tpv3_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_ipv6_l2tpv3_packets['match']],
+            'action': 'check_no_hash',
+        }
+    ]
+}
+
+mac_ipv4_esp_packets = {
+    'match': [
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=50)/ESP(spi=11)/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=50)/ESP(spi=12)/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.4",dst="192.168.0.7",proto=50)/ESP(spi=11)/Raw("x"*480)'],
+    'mismatch': [
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5", proto=115)/L2TP(\'\\x00\\x00\\x00\\x11\')/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=50)/ESP(spi=12)/Raw("x"*480)'
+    ]
+}
+
+mac_ipv4_esp = {
+    'sub_casename': 'mac_ipv4_esp',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / esp / end actions rss types esp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_esp_packets['match'][0],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_esp_packets['match'][1],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_esp_packets['match'][2],
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': [
+                i for i in mac_ipv4_esp_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                i for i in mac_ipv4_esp_packets['match']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv4_udp_esp_packets = {
+    'match': [
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=4500)/ESP(spi=12)/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.4",dst="192.168.0.7")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)'],
+    'mismatch': [
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=50)/ESP(spi=11)/Raw("x"*480)']
+}
+
+mac_ipv4_udp_esp = {
+    'sub_casename': 'mac_ipv4_udp_esp',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / esp / end actions rss types esp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_udp_esp_packets['match'][0],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_udp_esp_packets['match'][1],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_udp_esp_packets['match'][2],
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': [i for i in mac_ipv4_udp_esp_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                i for i in mac_ipv4_esp_packets['match']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_esp_packets = {
+    'match': [
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=50)/ESP(spi=11)/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=50)/ESP(spi=12)/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023", nh=50)/ESP(spi=11)/Raw("x"*480)'],
+    'mismatch': [
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=50)/ESP(spi=11)/Raw("x"*480)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)']
+}
+
+mac_ipv6_esp = {
+    'sub_casename': 'mac_ipv6_esp',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / esp / end actions rss types esp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_esp_packets['match'][0],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv6_esp_packets['match'][1],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv6_esp_packets['match'][2],
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': [i for i in mac_ipv6_esp_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_ipv6_esp_packets['match']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_ipv6_udp_esp_packets = {
+    'match': [
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(dport=4500)/ESP(spi=12)/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)'],
+    'mismatch': [
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(dport=4500)/ESP(spi=11)/Raw("x"*480)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=50)/ESP(spi=11)/Raw("x"*480)']
+}
+
+mac_ipv6_udp_esp = {
+    'sub_casename': 'mac_ipv6_udp_esp',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / udp / esp / end actions rss types esp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_udp_esp_packets['match'][0],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv6_udp_esp_packets['match'][1],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv6_udp_esp_packets['match'][2],
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv6_udp_esp_packets['mismatch'],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_ipv6_udp_esp_packets['match'],
+            'action': 'check_no_hash',
+        },
+    ],
+
+}
+
+mac_ipv4_ah_packets = {
+    'match': ['Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=51)/AH(spi=11)/Raw("x"*480)',
+              'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=51)/AH(spi=12)/Raw("x"*480)',
+              'Ether(dst="00:11:22:33:44:53")/IP(src="192.168.0.4",dst="192.168.0.8",proto=51)/AH(spi=11)/Raw("x"*480)'],
+    'mismatch': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IP(src="192.168.0.3",dst="192.168.0.5")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=51)/AH(spi=11)/Raw("x"*480)']
+}
+
+mac_ipv4_ah = {
+    'sub_casename': 'mac_ipv4_ah',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / ah / end actions rss types ah end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_ah_packets['match'][0],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_ah_packets['match'][1],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_ah_packets['match'][2],
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': [i for i in mac_ipv4_ah_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_ipv4_ah_packets['match']],
+            'action': 'check_no_hash',
+        },
+    ],
+
+}
+
+mac_ipv6_ah_packets = {
+    'match': [
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=51)/AH(spi=11)/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:55")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022", nh=51)/AH(spi=12)/Raw("x"*480)',
+        'Ether(dst="00:11:22:33:44:53")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023", nh=51)/AH(spi=11)/Raw("x"*480)'],
+    'mismatch': [
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",dst="192.168.0.5",proto=51)/AH(spi=11)/Raw("x"*480)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)']
+}
+
+mac_ipv6_ah = {
+    'sub_casename': 'mac_ipv6_ah',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv6 / ah / end actions rss types ah end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv6_ah_packets['match'][0],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv6_ah_packets['match'][1],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv6_ah_packets['match'][2],
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': [i for i in mac_ipv6_ah_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_ipv6_ah_packets['match']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_pay_packets = {
+    'mismatch': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IP(src="192.168.0.3",dst="192.168.0.5")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)']
+}
+
+mac_pppoe_pay_l2_src_only_packets = {
+    'mac_pppoe_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/Raw("x"*80)'
+    ],
+    'mac_pppoe_lcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)'
+    ],
+    'mac_pppoe_ipcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)'
+    ],
+}
+
+mac_pppoe_pay_l2_src_only = {
+    'sub_casename': 'mac_pppoe_pay_l2_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_packets['mac_pppoe_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_packets['mac_pppoe_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_packets['mac_pppoe_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_packets['mac_pppoe_lcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_lcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_packets['mac_pppoe_lcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_lcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_packets['mac_pppoe_lcp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_lcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_packets['mac_pppoe_ipcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_packets['mac_pppoe_ipcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_packets['mac_pppoe_ipcp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipcp_pay'},
+        },
+        {
+            'send_packet': [i for i in mac_pppoe_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [mac_pppoe_pay_l2_src_only_packets[key][i] for i in range(0, 3) for key in
+                            ['mac_pppoe_pay', 'mac_pppoe_lcp_pay', 'mac_pppoe_ipcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_pay_l2_dst_only_packets = {
+    'mac_pppoe_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/Raw("x"*80)']
+
+}
+
+mac_pppoe_pay_l2_dst_only = {
+    'sub_casename': 'mac_pppoe_pay_l2_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_pay_l2_dst_only_packets['mac_pppoe_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_dst_only_packets['mac_pppoe_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_dst_only_packets['mac_pppoe_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_pay'},
+        },
+        {
+            'send_packet': [i for i in mac_pppoe_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_pay_l2_dst_only_packets['mac_pppoe_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_pay_l2_src_only_l2_dst_only_packets = {
+    'mac_pppoe_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/Raw("x"*80)'
+    ]
+
+}
+
+mac_pppoe_pay_l2_src_only_l2_dst_only = {
+    'sub_casename': 'mac_pppoe_pay_l2_src_only_l2_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_pay'},
+        },
+        {
+            'send_packet': [i for i in mac_pppoe_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_pay_session_id_packets = {
+    'mac_pppoe_lcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)',
+    ],
+    'mac_pppoe_ipcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)'
+    ]
+
+}
+
+mac_pppoe_pay_session_id = {
+    'sub_casename': 'mac_pppoe_pay_session_id',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / end actions rss types pppoe end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_pay_session_id_packets['mac_pppoe_lcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_lcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_session_id_packets['mac_pppoe_lcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_lcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_session_id_packets['mac_pppoe_lcp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_lcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_session_id_packets['mac_pppoe_ipcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_session_id_packets['mac_pppoe_ipcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_session_id_packets['mac_pppoe_ipcp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [mac_pppoe_pay_session_id_packets[key][i] for i in range(0, 3) for key in
+                            ['mac_pppoe_lcp_pay', 'mac_pppoe_ipcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_pay_l2_src_only_session_id_packets = {
+    'mac_pppoe_lcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0xc021)/PPP_LCP()/Raw("x" * 80)'
+    ],
+    'mac_pppoe_ipcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66",type=0x8864)/PPPoE(sessionid=7)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x8021)/PPP_IPCP()/Raw("x" * 80)'
+    ]
+
+}
+
+mac_pppoe_pay_l2_src_only_session_id = {
+    'sub_casename': 'mac_pppoe_pay_l2_src_only_session_id',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / end actions rss types eth l2-src-only pppoe end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_session_id_packets['mac_pppoe_lcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_lcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_session_id_packets['mac_pppoe_lcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_lcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_session_id_packets['mac_pppoe_lcp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_lcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_session_id_packets['mac_pppoe_lcp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_lcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_session_id_packets['mac_pppoe_lcp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_lcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_session_id_packets['mac_pppoe_ipcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_session_id_packets['mac_pppoe_ipcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_session_id_packets['mac_pppoe_ipcp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_session_id_packets['mac_pppoe_ipcp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_pay_l2_src_only_session_id_packets['mac_pppoe_ipcp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipcp_pay'},
+        },
+
+        {
+            'send_packet': mac_pppoe_pay_packets['mismatch'],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [mac_pppoe_pay_l2_src_only_session_id_packets[key][i] for i in range(0, 4) for key in
+                            ['mac_pppoe_lcp_pay', 'mac_pppoe_ipcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+
+mac_pppoe_ipv4_pay_packets = {
+    'mismatch': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=5)/Raw("x"*80)']
+}
+
+mac_pppoe_ipv4_pay = [
+    'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/Raw("x"*80)'
+]
+
+mac_pppoe_ipv4_frag = [
+    'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=4)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)',
+    'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5", frag=3)/Raw("x"*80)'
+]
+
+mac_pppoe_ipv4_pay_src_test = [
+    {
+        'send_packet': mac_pppoe_ipv4_pay[0],
+        'action': {'save_hash': 'mac_pppoe_ipv4_pay'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_pay[1],
+        'action': {'check_hash_different': 'mac_pppoe_ipv4_pay'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_pay[2],
+        'action': {'check_hash_same', 'mac_pppoe_ipv4_pay'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_frag[0],
+        'action': {'save_hash': 'mac_pppoe_ipv4_frag'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_frag[1],
+        'action': {'check_hash_different': 'mac_pppoe_ipv4_frag'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_frag[2],
+        'action': {'check_hash_same', 'mac_pppoe_ipv4_frag'},
+    },
+
+    {
+        'send_packet': [i for i in mac_pppoe_ipv4_pay_packets['mismatch']],
+        'action': 'check_no_hash',
+    },
+]
+
+mac_pppoe_ipv4_pay_dst_test = [
+    {
+        'send_packet': mac_pppoe_ipv4_pay[0],
+        'action': {'save_hash': 'mac_pppoe_ipv4_pay'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_pay[2],
+        'action': {'check_hash_different': 'mac_pppoe_ipv4_pay'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_pay[1],
+        'action': {'check_hash_same', 'mac_pppoe_ipv4_pay'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_frag[0],
+        'action': {'save_hash': 'mac_pppoe_ipv4_frag'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_frag[2],
+        'action': {'check_hash_different': 'mac_pppoe_ipv4_frag'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_frag[1],
+        'action': {'check_hash_same', 'mac_pppoe_ipv4_frag'},
+    },
+
+    {
+        'send_packet': [i for i in mac_pppoe_ipv4_pay_packets['mismatch']],
+        'action': 'check_no_hash',
+    },
+]
+
+mac_pppoe_ipv4_pay_src_dst_test = [
+    {
+        'send_packet': mac_pppoe_ipv4_pay[0],
+        'action': {'save_hash': 'mac_pppoe_ipv4_pay'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_pay[1],
+        'action': {'check_hash_different': 'mac_pppoe_ipv4_pay'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_pay[2],
+        'action': {'check_hash_different': 'mac_pppoe_ipv4_pay'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_pay[3],
+        'action': {'check_hash_different': 'mac_pppoe_ipv4_pay'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_pay[-1],
+        'action': {'check_hash_same', 'mac_pppoe_ipv4_pay'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_frag[0],
+        'action': {'save_hash': 'mac_pppoe_ipv4_frag'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_frag[1],
+        'action': {'check_hash_different': 'mac_pppoe_ipv4_frag'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_frag[2],
+        'action': {'check_hash_different': 'mac_pppoe_ipv4_frag'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_frag[3],
+        'action': {'check_hash_different': 'mac_pppoe_ipv4_frag'},
+    },
+    {
+        'send_packet': mac_pppoe_ipv4_frag[-1],
+        'action': {'check_hash_same', 'mac_pppoe_ipv4_frag'},
+    },
+
+    {
+        'send_packet': [i for i in mac_pppoe_ipv4_pay_packets['mismatch']],
+        'action': 'check_no_hash',
+    },
+]
+
+mac_pppoe_ipv4_pay_post_test = [
+                                   {
+                                       'send_packet': [item for item in mac_pppoe_ipv4_pay + mac_pppoe_ipv4_frag],
+                                       'action': 'check_no_hash',
+                                   },
+                               ],
+
+mac_pppoe_ipv4_pay_l2_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_pay_l2_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': mac_pppoe_ipv4_pay_src_test,
+    'post-test': mac_pppoe_ipv4_pay_post_test
+}
+
+mac_pppoe_ipv4_pay_l2_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_pay_l2_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': mac_pppoe_ipv4_pay_dst_test,
+    'post-test': mac_pppoe_ipv4_pay_post_test
+}
+
+mac_pppoe_ipv4_pay_l2_src_only_l2_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_pay_l2_src_only_l2_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types eth end key_len 0 queues end / end',
+    'test': mac_pppoe_ipv4_pay_src_dst_test,
+    'post-test': mac_pppoe_ipv4_pay_post_test
+}
+
+
+mac_pppoe_ipv4_pay_l3_src_only_packets = {
+    'mac_pppoe_ipv4_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:54", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/Raw("x"*80)',
+    ],
+    'mac_pppoe_ipv4_frag': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2", frag=5)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:54", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7", frag=3)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_pay_l3_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_pay_l2_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_packets['mac_pppoe_ipv4_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_packets['mac_pppoe_ipv4_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_packets['mac_pppoe_ipv4_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_packets['mac_pppoe_ipv4_frag'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_packets['mac_pppoe_ipv4_frag'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_packets['mac_pppoe_ipv4_frag'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_frag'},
+        },
+
+        {
+            'send_packet': mac_pppoe_ipv4_pay_packets['mismatch'],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_packets['mac_pppoe_ipv4_pay'] +
+                           mac_pppoe_ipv4_pay_l3_src_only_packets['mac_pppoe_ipv4_frag'],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_pay_l3_dst_only_packets = {
+    'mac_pppoe_ipv4_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.7", dst="192.168.1.2")/Raw("x"*80)',
+    ],
+    'mac_pppoe_ipv4_frag': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3", frag=5)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.7", dst="192.168.1.2", frag=3)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_pay_l3_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_pay_l3_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_dst_only_packets['mac_pppoe_ipv4_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_dst_only_packets['mac_pppoe_ipv4_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_dst_only_packets['mac_pppoe_ipv4_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_dst_only_packets['mac_pppoe_ipv4_frag'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_dst_only_packets['mac_pppoe_ipv4_frag'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_dst_only_packets['mac_pppoe_ipv4_frag'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_frag'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_pay_l3_dst_only_packets['mac_pppoe_ipv4_pay'] +
+                            mac_pppoe_ipv4_pay_l3_dst_only_packets['mac_pppoe_ipv4_frag']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets = {
+    'mac_pppoe_ipv4_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)'
+    ],
+    'mac_pppoe_ipv4_frag': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2", frag=5)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7", frag=5)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7", frag=5)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=3)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_frag'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_frag'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_frag'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_frag'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_frag'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_frag'},
+        },
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_pay'] +
+                            mac_pppoe_ipv4_pay_l3_src_only_l3_dst_only_packets['mac_pppoe_ipv4_frag']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_udp_pay_packets = {
+    'mismatch': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:'
+        '910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/UDP(sport=25,dport=23)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l2_src_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l2_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l2_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_src_only_packets['mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_src_only_packets['mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_src_only_packets['mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_packets['mismatch'],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_src_only_packets['mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_udp_pay_l2_dst_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l2_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l2_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_dst_only_packets['mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_dst_only_packets['mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_dst_only_packets['mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_packets['mismatch'],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_dst_only_packets['mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+
+}
+
+mac_pppoe_ipv4_udp_pay_l2_src_only_l2_dst_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/UDP(sport=19,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l2_src_only_l2_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l2_src_only_l2_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_udp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_udp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_packets['mismatch'],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+
+}
+
+mac_pppoe_ipv4_udp_pay_l3_src_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=19,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l3_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l3_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_packets['mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_packets['mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_packets['mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_packets['mismatch'],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_packets['mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_udp_pay_l3_dst_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=19,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l3_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l3_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_packets['mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_packets['mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_packets['mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_udp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_packets['mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_udp_pay_l4_src_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=9,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/UDP(sport=25,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l4_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l4_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_packets['mismatch'],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_udp_pay_l4_dst_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l4_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l4_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_packets['mismatch'],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_udp_pay_l3_src_only_l4_src_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.9")/UDP(sport=25,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l3_src_only_l4_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l3_src_only_l4_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_udp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_udp_pay_l3_src_only_l4_dst_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l3_src_only_l4_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l3_src_only_l4_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_udp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_src_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=19,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_udp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_dst_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/UDP(sport=25,dport=99)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)'
+
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_udp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_udp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets = {
+    'mac_pppoe_ipv4_udp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=19,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=99)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/UDP(sport=19,dport=99)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_udp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_udp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                'mac_pppoe_ipv4_udp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                               'mac_pppoe_ipv4_udp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                               'mac_pppoe_ipv4_udp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                               'mac_pppoe_ipv4_udp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                               'mac_pppoe_ipv4_udp_pay'][4],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                               'mac_pppoe_ipv4_udp_pay'][5],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                'mac_pppoe_ipv4_udp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_udp_pay'},
+        },
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_udp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': mac_pppoe_ipv4_udp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                'mac_pppoe_ipv4_udp_pay'],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_packets = {
+    'mismatch': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/'
+        'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/TCP(sport=25,dport=23)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l2_src_only_packets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l2_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l2_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l2_src_only_packets['mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l2_src_only_packets['mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l2_src_only_packets['mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_l2_src_only_packets['mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_l2_dst_only_packets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l2_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l2_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l2_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l2_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l2_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_l2_dst_only_packets['mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_l2_src_only_l2_dst_only_packets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l2_src_only_l2_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l2_src_only_l2_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in
+                            mac_pppoe_ipv4_tcp_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_src_only_packets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=19,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l3_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_packets['mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_packets['mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_packets['mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_l3_src_only_packets['mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_dst_only_pakets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.3")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=19,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l3_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_pakets['mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_pakets['mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_pakets['mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_l3_dst_only_pakets['mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_l4_src_only_packets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/TCP(sport=25,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l4_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l3_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l4-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_l4_dst_only_packets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=19)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.7")/TCP(sport=19,dport=23)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l4_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l4_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l4-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_src_only_packets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.9")/TCP(sport=25,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in
+                            mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_dst_only_packets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=19,dport=23)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in
+                            mac_pppoe_ipv4_tcp_pay_l3_src_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_src_only_packets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=9,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=9,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_src_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in
+                            mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_src_only_packets['mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_dst_only_packets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=90)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.7")/TCP(sport=25,dport=90)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp l3-dst-only l4-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in
+                            mac_pppoe_ipv4_tcp_pay_l3_dst_only_l4_dst_only_packets['mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets = {
+    'mac_pppoe_ipv4_tcp_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.5")/TCP(sport=25,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=19,dport=23)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=99)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.3", dst="192.168.1.5")/TCP(sport=19,dport=99)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=25,dport=23)/Raw("x"*80)'
+
+    ]
+}
+
+mac_pppoe_ipv4_tcp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv4_tcp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                'mac_pppoe_ipv4_tcp_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                               'mac_pppoe_ipv4_tcp_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                               'mac_pppoe_ipv4_tcp_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                               'mac_pppoe_ipv4_tcp_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                               'mac_pppoe_ipv4_tcp_pay'][4],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                               'mac_pppoe_ipv4_tcp_pay'][5],
+            'action': {'check_hash_different': 'mac_pppoe_ipv4_tcp_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv4_tcp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                'mac_pppoe_ipv4_tcp_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv4_tcp_pay'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv4_tcp_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in
+                            mac_pppoe_ipv4_tcp_pay_l3_src_only_l3_dst_only_l4_src_only_l4_dst_only_packets[
+                                'mac_pppoe_ipv4_tcp_pay']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv6_pay_packets = {
+    'mismatch': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src="192.168.1.1", dst="192.168.1.2", frag=5)/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)'
+    ]
+}
+
+mac_pppoe_ipv6_pay_l2_src_only_packets = {
+    'mac_pppoe_ipv6_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)'
+    ],
+    'mac_pppoe_ipv6_frag': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)',
+    ]
+}
+
+mac_pppoe_ipv6_pay_l2_src_only = {
+    'sub_casename': 'mac_pppoe_ipv6_pay_l2_src_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_packets['mac_pppoe_ipv6_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv6_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_packets['mac_pppoe_ipv6_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv6_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_packets['mac_pppoe_ipv6_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv6_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_packets['mac_pppoe_ipv6_frag'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv6_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_packets['mac_pppoe_ipv6_frag'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv6_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_packets['mac_pppoe_ipv6_frag'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv6_frag'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv6_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_ipv6_pay_l2_src_only_packets['mac_pppoe_ipv6_frag']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv6_pay_l2_dst_only_packets = {
+    'mac_pppoe_ipv6_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)'
+    ],
+    'mac_pppoe_ipv6_frag': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)'
+    ]
+
+}
+
+mac_pppoe_ipv6_pay_l2_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv6_pay_l2_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_dst_only_packets['mac_pppoe_ipv6_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv6_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_dst_only_packets['mac_pppoe_ipv6_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv6_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_dst_only_packets['mac_pppoe_ipv6_pay'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv6_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_dst_only_packets['mac_pppoe_ipv6_frag'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv6_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_dst_only_packets['mac_pppoe_ipv6_frag'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv6_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_dst_only_packets['mac_pppoe_ipv6_frag'][2],
+            'action': {'check_hash_same', 'mac_pppoe_ipv6_frag'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv6_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_ipv6_pay_l2_dst_only_packets['mac_pppoe_ipv6_frag']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets = {
+    'mac_pppoe_ipv6_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/Raw("x"*80)'
+    ],
+    'mac_pppoe_ipv6_frag': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:53", dst="10:22:33:44:55:99")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/IPv6ExtHdrFragment()/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=7)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1537", dst="CDCD:910A:2222:5498:8475:1111:3900:2023")/IPv6ExtHdrFragment()/Raw("x"*80)'
+
+    ]
+}
+
+mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only = {
+    'sub_casename': 'mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / pppoes / ipv6 / end actions rss types eth end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv6_pay'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv6_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv6_pay'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv6_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv6_pay'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv6_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv6_pay'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv6_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv6_pay'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv6_pay'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv6_frag'][0],
+            'action': {'save_hash': 'mac_pppoe_ipv6_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv6_frag'][1],
+            'action': {'check_hash_different': 'mac_pppoe_ipv6_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv6_frag'][2],
+            'action': {'check_hash_different': 'mac_pppoe_ipv6_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv6_frag'][3],
+            'action': {'check_hash_different': 'mac_pppoe_ipv6_frag'},
+        },
+        {
+            'send_packet': mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv6_frag'][-1],
+            'action': {'check_hash_same', 'mac_pppoe_ipv6_frag'},
+        },
+
+        {
+            'send_packet': [i for i in mac_pppoe_ipv6_pay_packets['mismatch']],
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [i for i in mac_pppoe_ipv6_pay_l2_src_only_l2_dst_only_packets['mac_pppoe_ipv6_frag']],
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+mac_pppoe_ipv6_pay_l3_src_only_packets = {
+    'mac_pppoe_ipv6_pay': [
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66")/PPPoE(sessionid=3)/PPP(proto=0x0057)/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1536", dst="CDCD:910A:2222:5498:8475:1111:3900:2022")/Raw("x"*80)',
+        'Ether(src="00:11:22:33:44:55", dst="10:22:33:44:55:66&#