[V2,4/8] tests/TestSuite_cvl_advanced_iavf_rss:update script
diff mbox series

Message ID 20201028105931.10608-5-haiyangx.zhao@intel.com
State Superseded
Headers show
Series
  • tests: update or add rss related suites
Related show

Commit Message

Haiyang Zhao Oct. 28, 2020, 10:59 a.m. UTC
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(-)

Comments

Xie, WeiX Oct. 29, 2020, 7:58 a.m. UTC | #1
Tested-by:  Xie,WeiX < weix.xie@intel.com>

Regards,
Xie Wei


> -----Original Message-----
> From: Haiyang Zhao [mailto:haiyangx.zhao@intel.com]
> Sent: Wednesday, October 28, 2020 6:59 PM
> To: dts@dpdk.org; Fu, Qi <qi.fu@intel.com>
> Cc: Xie, WeiX <weix.xie@intel.com>
> Subject: [dts][PATCH V2 4/8] tests/TestSuite_cvl_advanced_iavf_rss:update
> script

Patch
diff mbox series

diff --git a/tests/TestSuite_cvl_advanced_iavf_rss.py b/tests/TestSuite_cvl_advanced_iavf_rss.py
index f1135b5..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)/'
-                  'GTP_PDUSession_ExtensionHeader( pdu_type=1, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader( pdu_type=0, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader( pdu_type=0, qos_flow=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)/'
-                  'GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                  'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/'
-                  'GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                  'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                  'GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                  'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                  'GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                  'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                  'GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                  'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader(pdu_type=1, qos_flow=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)/'
-                  'GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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)/'
-                     'GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=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()