test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH v1] tests: add test cases for iavf rss support gtpogre
@ 2021-08-26  6:57 Hailin Xu
  2021-08-26  7:47 ` Xu, HailinX
  0 siblings, 1 reply; 4+ messages in thread
From: Hailin Xu @ 2021-08-26  6:57 UTC (permalink / raw)
  To: dts; +Cc: qi.fu, Hailin Xu

The ice_gtp-o-gre pkg support GTPoGRE parsing,
Based on this ddp pkg, dpdk enable rte_flow for GTPoGRE in CVL IAVF.
Add this test plan for GTPoGRE RSS tests.

Signed-off-by: Hailin Xu <hailinx.xu@intel.com>
---
 ...TestSuite_cvl_advanced_iavf_rss_gtpogre.py | 5658 ++++++++++++-----
 1 file changed, 4105 insertions(+), 1553 deletions(-)

diff --git a/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.py b/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.py
index 5d5d7eea..8ed9974a 100755
--- a/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.py
+++ b/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.py
@@ -1,6 +1,6 @@
 # BSD LICENSE
 #
-# Copyright(c)2021 Intel Corporation. All rights reserved.
+# Copyright(c) 2021 Intel Corporation. All rights reserved.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -31,2100 +31,4547 @@
 
 
 import re
-import random
 import time
 from packet import Packet
 from pmd_output import PmdOutput
 from test_case import TestCase
 from rte_flow_common import RssProcessing
 
-mac_ipv4_gtpu_ipv4_basic = {
-    'gtpogre-ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/("X"*480)',
+# ipv4+ipv4+ipv4
+mac_ipv4_gre_ipv4_gtpu_ipv4_basic = {
+    'gtpogre-ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/IP(src="1.1.2.6", dst="1.1.2.7")',
 }
 
-mac_ipv4_gtpu_ipv4_l3src_changed_pkt = eval(str(mac_ipv4_gtpu_ipv4_basic).replace('192.168.0.2', '192.168.1.2'))
-mac_ipv4_gtpu_ipv4_l3dst_changed_pkt = eval(str(mac_ipv4_gtpu_ipv4_basic).replace('192.168.0.1', '192.168.1.1'))
+mac_ipv4_gre_ipv4_gtpu_ipv4_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv4_basic).replace('1.1.2.6', '1.1.2.16'))
+mac_ipv4_gre_ipv4_gtpu_ipv4_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv4_basic).replace('1.1.2.7', '1.1.2.17'))
+mac_ipv4_gre_ipv4_gtpu_ipv4_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+]
 
-mac_ipv4_gtpu_ipv4_l3dst_only = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_l3dst',
+mac_ipv4_gre_ipv4_gtpu_ipv4_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_l3dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IP(src="1.1.2.16", dst="1.1.2.7")',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_ipv4_l3src_only = eval(str(mac_ipv4_gtpu_ipv4_l3dst_only)
-                                     .replace('mac_ipv4_gtpu_ipv4_l3dst', 'mac_ipv4_gtpu_ipv4_l3src')
-                                     .replace('l3-dst-only', 'l3-src-only')
-                                     .replace('check_hash_same', 'hash_check_different')
-                                     .replace('check_hash_different', 'check_hash_same')
-                                     .replace('hash_check_different', 'check_hash_different'))
-mac_ipv4_gtpu_ipv4_all = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_all',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',
-    'test': [
-        {
-            'send_packet': mac_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'],
-            'action': 'save_hash',
-        },
-        {
-            'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
-            'action': 'check_hash_different',
-        },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
-            'action': 'check_hash_different',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
         },
+    ],
+    'post-test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'].replace('192.168.0.', '192.168.1.'),
-            'action': 'check_hash_different',
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
         },
-    ],
-    'post-test': []
+    ]
 }
 
-mac_ipv4_gtpu_ipv4_gtpu = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_gtpu',
+mac_ipv4_gre_ipv4_gtpu_ipv4_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_l3src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / end actions rss types gtpu end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'].replace('teid=0x123456', 'teid=0x12345'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'].replace('192.168.0.', '192.168.1.'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IP(src="1.1.2.6", dst="1.1.2.17")',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_ipv4_toeplitz = [mac_ipv4_gtpu_ipv4_l3dst_only, mac_ipv4_gtpu_ipv4_l3src_only,
-                               mac_ipv4_gtpu_ipv4_all, mac_ipv4_gtpu_ipv4_gtpu]
-
-mac_ipv4_gtpu_ipv4_symmetric = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_symmetric',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',
-    'test': [
-        {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2", frag=6)/("X"*480)',
-            'action': {'save_hash': 'gtpogre-ipv4-frag'},
-        },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.2",src="192.168.0.1", frag=6)/("X"*480)',
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
     'post-test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.2",src="192.168.0.1", frag=6)/("X"*480)',
-            'action': {'check_no_hash_or_different': 'gtpogre-ipv4-frag'},
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
         },
-    ],
+    ]
 }
 
-mac_ipv4_gtpu_ipv6_symmetric = eval(str(mac_ipv4_gtpu_ipv4_symmetric).replace('IPv6', 'IPv61')
-                                    .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                    .replace('IP(dst="192.168.0.2",src="192.168.0.1"', 'IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020",src="ABAB:910B:6666:3457:8295:3333:1800:2929"')
-                                    .replace(', frag=6)', ')/IPv6ExtHdrFragment()')
-                                    .replace('IPv61(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(dst="192.168.0.1",src="192.168.0.2")')
-                                    .replace('IPv61(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(src="192.168.0.1",dst="192.168.0.2")')
-                                    .replace('gtpu / ipv4', 'gtpu / ipv6').replace('types ipv4', 'types ipv6')
-                                    )
-
-mac_ipv4_gtpu_ipv4_udp_symmetric = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_symmetric',
+mac_ipv4_gre_ipv4_gtpu_ipv4_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_all',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=22, dport=23)/("X"*480)',
-            'action': {'save_hash': 'basic_with_rule'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=22, dport=23)/("X"*480)',
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_l3src_changed_pkt['gtpogre-ipv4-nonfrag'].replace('1.1.2.7', '1.1.2.17'),
+            'action': 'check_hash_different',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
     'post-test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': 'check_no_hash_or_different',
-        },
-        {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=22, dport=23)/("X"*480)',
-            'action': 'check_no_hash_or_different',
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
         },
-        {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': 'check_no_hash_or_different',
-        },
-        {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': 'check_no_hash_or_different',
-        },
-    ],
+    ]
 }
 
-mac_ipv4_gtpu_ipv6_udp_symmetric = eval(str(mac_ipv4_gtpu_ipv4_udp_symmetric).replace('IPv6', 'IPv61')
-                                        .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                        .replace('IP(dst="192.168.0.2",src="192.168.0.1"', 'IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020",src="ABAB:910B:6666:3457:8295:3333:1800:2929"')
-                                        .replace('IPv61(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(dst="192.168.0.1",src="192.168.0.2")')
-                                        .replace('IPv61(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(src="192.168.0.1",dst="192.168.0.2")')
-                                        .replace('gtpu / ipv4', 'gtpu / ipv6').replace('types ipv4-udp', 'types ipv6-udp')
-                                        )
+mac_ipv4_gre_ipv4_gtpu_ipv4_toeplitz = [mac_ipv4_gre_ipv4_gtpu_ipv4_l3dst_only, mac_ipv4_gre_ipv4_gtpu_ipv4_l3src_only,
+                                        mac_ipv4_gre_ipv4_gtpu_ipv4_all]
+
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic = {
+    'gtpogre-ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/IP(src="1.1.2.6", dst="1.1.2.7")/UDP(dport=2, sport=4)',
+}
 
-mac_ipv4_gtpu_ipv4_tcp_symmetric = eval(str(mac_ipv4_gtpu_ipv4_udp_symmetric).replace('TCP(', 'TCP1(')
-                                        .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')
-                                        .replace('udp / end', 'tcp / end ').replace('ipv4-udp', 'ipv4-tcp')
-                                        .replace('udp_symmetric', 'tcp_symmetric'))
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic).replace('1.1.2.6', '1.1.2.16'))
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic).replace('1.1.2.7', '1.1.2.17'))
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic).replace('sport=4', 'sport=14'))
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic).replace('dport=2', 'dport=12'))
 
-mac_ipv4_gtpu_ipv6_tcp_symmetric = eval(str(mac_ipv4_gtpu_ipv4_tcp_symmetric).replace('IPv6', 'IPv61')
-                                        .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                        .replace('IP(dst="192.168.0.2",src="192.168.0.1"', 'IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020",src="ABAB:910B:6666:3457:8295:3333:1800:2929"')
-                                        .replace('IPv61(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(dst="192.168.0.1",src="192.168.0.2")')
-                                        .replace('IPv61(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(src="192.168.0.1",dst="192.168.0.2")')
-                                        .replace('gtpu / ipv4', 'gtpu / ipv6').replace('types ipv4-tcp', 'types ipv6-tcp')
-                                        )
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=4, dport=2)/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)/("X"*480)',
+]
 
-mac_ipv4_gtpu_eh_dl_ipv4_symmetric = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_symmetric',
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP()/("X"*480)',
-            'action': {'save_hash': 'gtpogre-ipv4-udp'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP()/("X"*480)',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=12, sport=14)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
     'post-test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP()/("X"*480)',
-            'action': {'check_no_hash_or_different': 'gtpogre-ipv4-udp'},
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
         },
-    ],
+    ]
 }
-mac_ipv4_gtpu_eh_ul_ipv4_symmetric = eval(str(mac_ipv4_gtpu_eh_dl_ipv4_symmetric)
-                                          .replace('(type=1', '(type=2')
-                                          .replace('(type=0', '(type=1')
-                                          .replace('(type=2', '(type=0')
-                                          .replace('eh_dl', 'eh_ul')
-                                          .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')
-                                          )
-
-mac_ipv4_gtpu_eh_ipv4_symmetric = [mac_ipv4_gtpu_eh_dl_ipv4_symmetric,  mac_ipv4_gtpu_eh_ul_ipv4_symmetric]
 
-mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric',
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=22, dport=23)/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': 'check_hash_same',
-        },
-        {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=22, dport=23)/("X"*480)',
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=23, dport=22)/("X"*480)',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=12, sport=14)',
             'action': 'check_hash_same',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=22, dport=23)/("X"*480)',
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
     'post-test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': 'check_no_hash_or_different',
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
         },
-        {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=22, dport=23)/("X"*480)',
-            'action': 'check_no_hash_or_different',
-        },
-        {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': 'check_no_hash_or_different',
-        },
-        {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=22, dport=23)/("X"*480)',
-            'action': 'check_no_hash_or_different',
-        },
-    ],
-}
-mac_ipv4_gtpu_eh_ul_ipv4_udp_symmetric = eval(str(mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric)
-                                              .replace('(type=1', '(type=2')
-                                              .replace('(type=0', '(type=1')
-                                              .replace('(type=2', '(type=0')
-                                              .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')
-                                              .replace('eh_dl', 'eh_ul'))
-mac_ipv4_gtpu_eh_ipv4_udp_symmetric = [mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric, mac_ipv4_gtpu_eh_ul_ipv4_udp_symmetric]
-
-mac_ipv4_gtpu_eh_ipv4_tcp_symmetric = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')
-                                                        .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')
-                                                        .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))
-                                       for element in mac_ipv4_gtpu_eh_ipv4_udp_symmetric]
-
-mac_ipv4_gtpu_eh_ipv6_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_symmetric).replace('IPv6', 'IPv61')
-                                       .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                       .replace('IP(dst="192.168.0.2",src="192.168.0.1"', 'IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020",src="ABAB:910B:6666:3457:8295:3333:1800:2929"')
-                                       .replace(', frag=6)', ')/IPv6ExtHdrFragment()')
-                                       .replace('IPv61(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(dst="192.168.0.1",src="192.168.0.2")')
-                                       .replace('IPv61(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(src="192.168.0.1",dst="192.168.0.2")')
-                                       .replace('ipv4 / end', 'ipv6 / end').replace('types ipv4', 'types ipv6')
-                                       .replace('ipv4_symmetric', 'ipv6_symmetric')
-                                       )
-
-mac_ipv4_gtpu_eh_ipv6_udp_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_udp_symmetric).replace('IPv6', 'IPv61')
-                                        .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                        .replace('IP(dst="192.168.0.2",src="192.168.0.1"', 'IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020",src="ABAB:910B:6666:3457:8295:3333:1800:2929"')
-                                        .replace('IPv61(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(dst="192.168.0.1",src="192.168.0.2")')
-                                        .replace('IPv61(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(src="192.168.0.1",dst="192.168.0.2")')
-                                        .replace('ipv4 / udp / end', 'ipv6 / udp / end').replace('types ipv4-udp', 'types ipv6-udp')
-                                        .replace('ipv4_udp_symmetric', 'ipv6_udp_symmetric')
-                                        )
-
-
-mac_ipv4_gtpu_eh_ipv6_tcp_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_tcp_symmetric).replace('IPv6', 'IPv61')
-                                        .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                        .replace('IP(dst="192.168.0.2",src="192.168.0.1"', 'IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020",src="ABAB:910B:6666:3457:8295:3333:1800:2929"')
-                                        .replace('IPv61(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(dst="192.168.0.1",src="192.168.0.2")')
-                                        .replace('IPv61(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")', 'IP(src="192.168.0.1",dst="192.168.0.2")')
-                                        .replace('ipv4 / tcp / end', 'ipv6 / tcp / end').replace('types ipv4-tcp', 'types ipv6-tcp')
-                                        .replace('ipv4_tcp_symmetric', 'ipv6_tcp_symmetric')
-                                        )
-
-mac_ipv4_gtpu_ipv4_udp_basic = {
-        'ipv4-udp': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
-        'gtpogre-ipv4-udp': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+    ]
 }
 
-mac_ipv4_gtpu_ipv4_udp_l3dst = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3dst',
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IP(src="1.1.2.16", dst="1.1.2.17")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_ipv4_udp_l3src = eval(str(mac_ipv4_gtpu_ipv4_udp_l3dst)
-                                    .replace('mac_ipv4_gtpu_ipv4_udp_l3dst', 'mac_ipv4_gtpu_ipv4_udp_l3src')
-                                    .replace('l3-dst-only', 'l3-src-only')
-                                    .replace('check_hash_same', 'hash_check_different')
-                                    .replace('check_hash_different', 'check_hash_same')
-                                    .replace('hash_check_different', 'check_hash_different'))
-
-mac_ipv4_gtpu_ipv4_udp_l3src_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3src_l4src',
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=33'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IP(src="1.1.2.16", dst="1.1.2.17")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33').replace('192.168.0.1',
-                                                                                                '192.168.1.1'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_ipv4_udp_l3src_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3src_l4dst',
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3srcl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3srcl4src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / 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_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=32').replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_ipv4_udp_l3dst_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3dst_l4src',
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3srcl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3srcl4dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / 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_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33').replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=2, sport=14)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_ipv4_udp_l3dst_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3dst_l4dst',
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dstl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dstl4src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / 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_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=32').replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
-mac_ipv4_gtpu_ipv4_udp_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l4dst',
+
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dstl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dstl4dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / 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_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=32')
-                                                       .replace('192.168.0', '192.168.1'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
         },
-    ],
-    'post-test': []
-}
-mac_ipv4_gtpu_ipv4_udp_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l4src',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'],
-            'action': 'save_hash',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=32'),
-            'action': 'check_hash_different',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
+    ],
+    'post-test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=32')
-                                                       .replace('192.168.0', '192.168.1'),
-            'action': 'check_hash_same',
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
         },
-    ],
-    'post-test': []
+    ]
 }
 
-mac_ipv4_gtpu_ipv4_udp_all = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_all',
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_udp_all',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=32'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('teid=0x123456', 'teid=0x12345'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IP(src="1.1.2.6", dst="1.1.2.7")/UDP(dport=2, sport=4)',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_ipv4_udp_l3 = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end',
-    'test': [
-        {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'],
-            'action': 'save_hash',
-        },
-        {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.1', '192.168.1.1'),
-            'action': 'check_hash_different',
-        },
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.2', '192.168.1.2'),
-            'action': 'check_hash_different',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
+    ],
+    'post-test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22,dport=23', 'sport=12,dport=13'),
-            'action': 'check_hash_same',
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
         },
-    ],
-    'post-test': []
+    ]
 }
 
-mac_ipv4_gtpu_ipv4_udp_toeplitz = [mac_ipv4_gtpu_ipv4_udp_l3dst, mac_ipv4_gtpu_ipv4_udp_l3src,
-                                   mac_ipv4_gtpu_ipv4_udp_l3dst_l4src, mac_ipv4_gtpu_ipv4_udp_l3dst_l4dst,
-                                   mac_ipv4_gtpu_ipv4_udp_l3src_l4src, mac_ipv4_gtpu_ipv4_udp_l3src_l4dst,
-                                   mac_ipv4_gtpu_ipv4_udp_l4src, mac_ipv4_gtpu_ipv4_udp_l4dst,
-                                   mac_ipv4_gtpu_ipv4_udp_all, mac_ipv4_gtpu_ipv4_udp_l3]
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_toeplitz = [mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dst_only, mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3src_only,
+                                            mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4dst_only, mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l4src_only,
+                                            mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dstl4dst, mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3srcl4dst,
+                                            mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3dstl4src, mac_ipv4_gre_ipv4_gtpu_ipv4_udp_l3srcl4src,
+                                            mac_ipv4_gre_ipv4_gtpu_ipv4_udp_all]
+
 
-mac_ipv4_gtpu_ipv4_tcp_toeplitz = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')
-                                        .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')
-                                        .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))
-                                   for element in mac_ipv4_gtpu_ipv4_udp_toeplitz]
+mac_ipv4_gre_ipv4_gtpu_ipv4_tcp_toeplitz = [eval(str(element).replace('_udp', '_tcp')
+                                        .replace('TCP(sport', 'UDP(sport')
+                                        .replace('UDP(dport', 'TCP(dport')
+                                        .replace('gtpu / ipv4 / udp', 'gtpu / ipv4 / tcp')
+                                        .replace('ipv4-udp', 'ipv4-tcp'))
+                                   for element in mac_ipv4_gre_ipv4_gtpu_ipv4_udp_toeplitz]
 
-mac_ipv4_gtpu_ipv6_basic = {
-    'gtpogre-ipv6-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic = {
+    'gtpogre-ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.7")',
+    'gtpogre-ipv4-ul': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.7")',
+    'gtpogre-ipv4-dl': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.7")',
 }
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic).replace('1.1.2.6', '1.1.2.16'))
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic).replace('1.1.2.7', '1.1.2.17'))
 
-mac_ipv4_gtpu_ipv6_l3src_changed_pkt = eval(str(mac_ipv4_gtpu_ipv6_basic).replace('ABAB', '1212'))
-mac_ipv4_gtpu_ipv6_l3dst_changed_pkt = eval(str(mac_ipv4_gtpu_ipv6_basic).replace('CDCD', '3434'))
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+]
 
-mac_ipv4_gtpu_ipv6_l3dst_only = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_l3dst',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_basic['gtpogre-ipv6-nonfrag'],
-            'action': {'save_hash', 'gtpogre-ipv6-nonfrag'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['gtpogre-ipv6-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['gtpogre-ipv6-nonfrag'],
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.16", dst="1.1.2.7")',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_ipv6_l3src_only = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_l3src_only',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_basic['gtpogre-ipv6-nonfrag'],
-            'action': {'save_hash', 'ipv6-nonfrag'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['gtpogre-ipv6-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['gtpogre-ipv6-nonfrag'],
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_ipv6_l3src_only = eval(str(mac_ipv4_gtpu_ipv6_l3dst_only)
-                                     .replace('mac_ipv4_gtpu_ipv6_l3dst', 'mac_ipv4_gtpu_ipv6_l3src')
-                                     .replace('l3-dst-only', 'l3-src-only')
-                                     .replace('check_hash_same', 'hash_check_different')
-                                     .replace('check_hash_different', 'check_hash_same')
-                                     .replace('hash_check_different', 'check_hash_different'))
-mac_ipv4_gtpu_ipv6_all = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_all',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_basic['gtpogre-ipv6-nonfrag'],
-            'action': {'save_hash', 'ipv6-nonfrag'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['gtpogre-ipv6-nonfrag'],
-            'action': 'check_hash_different',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['gtpogre-ipv6-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_basic['gtpogre-ipv6-nonfrag'].replace('ABAB', '1212').replace('CDCD', '3434'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_ipv6_gtpu = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_gtpu',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / end actions rss types gtpu end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_basic['gtpogre-ipv6-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_basic['gtpogre-ipv6-nonfrag'].replace('teid=0x123456', 'teid=0x12345'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_basic['gtpogre-ipv6-nonfrag'].replace('ABAB', '1212').replace('CDCD', '3434'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.17")',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_ipv6_toeplitz = [mac_ipv4_gtpu_ipv6_l3dst_only, mac_ipv4_gtpu_ipv6_l3src_only,
-                               mac_ipv4_gtpu_ipv6_all, mac_ipv4_gtpu_ipv6_gtpu]
-
-mac_ipv4_gtpu_ipv6_udp_basic = {
-        'ipv6-udp': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
-        'gtpogre-ipv6-udp': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
-}
-mac_ipv4_gtpu_ipv6_udp_l3dst = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3dst',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('CDCD', '3434'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('ABAB', '1212'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_ipv6_udp_l3src = eval(str(mac_ipv4_gtpu_ipv6_udp_l3dst)
-                                    .replace('mac_ipv4_gtpu_ipv6_udp_l3dst', 'mac_ipv4_gtpu_ipv6_udp_l3src')
-                                    .replace('l3-dst-only', 'l3-src-only')
-                                    .replace('check_hash_same', 'hash_check_different')
-                                    .replace('check_hash_different', 'check_hash_same')
-                                    .replace('hash_check_different', 'check_hash_different'))
-
-mac_ipv4_gtpu_ipv6_udp_l3src_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3src_l4src',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'],
-            'action': 'save_hash',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('ABAB', '1212'),
-            'action': 'check_hash_different',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33').replace('CDCD', '3434'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_ipv6_udp_l3src_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3src_l4dst',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_all',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('ABAB', '1212'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=32').replace('CDCD', '3434'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.7")',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_toeplitz = [mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3dst_only, mac_ipv4_gre_ipv4_gtpu_eh_ipv4_l3src_only,
+                                           mac_ipv4_gre_ipv4_gtpu_eh_ipv4_all]
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic = {
+    'gtpogre-ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.7")/UDP(dport=2, sport=4)',
+    'gtpogre-ipv4-ul': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.7")/UDP(dport=2, sport=4)',
+    'gtpogre-ipv4-dl': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.7")/UDP(dport=2, sport=4)',
 }
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic).replace('1.1.2.6', '1.1.2.16'))
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic).replace('1.1.2.7', '1.1.2.17'))
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic).replace('sport=4', 'sport=14'))
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic).replace('dport=2', 'dport=12'))
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(dport=2, sport=4)/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.7")/TCP(sport=4, dport=2)'
+]
 
-mac_ipv4_gtpu_ipv6_udp_l3dst_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3dst_l4src',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('CDCD', '3434'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=33'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33').replace('ABAB', '1212'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_ipv6_udp_l3dst_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3dst_l4dst',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('CDCD', '3434'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=32').replace('ABAB', '1212'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
-    ],
-    'post-test': []
-}
-mac_ipv4_gtpu_ipv6_udp_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l4dst',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=32')
-                .replace('ABAB', '1212').replace('CDCD', '3434'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=12, sport=14)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
-mac_ipv4_gtpu_ipv6_udp_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l4src',
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=32'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=32')
-                .replace('ABAB', '1212').replace('CDCD', '3434'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=12, sport=14)',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_ipv6_udp_all = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_all',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=32'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('CDCD', '3434'),
-            'action': 'check_hash_different',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('ABAB', '1212'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('teid=0x123456', 'teid=0x12345'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=12, sport=14)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_ipv6_udp_toeplitz = [mac_ipv4_gtpu_ipv6_udp_l3dst, mac_ipv4_gtpu_ipv6_udp_l3src,
-                                   mac_ipv4_gtpu_ipv6_udp_l3dst_l4src, mac_ipv4_gtpu_ipv6_udp_l3dst_l4dst,
-                                   mac_ipv4_gtpu_ipv6_udp_l3src_l4src, mac_ipv4_gtpu_ipv6_udp_l3src_l4dst,
-                                   mac_ipv4_gtpu_ipv6_udp_l4src, mac_ipv4_gtpu_ipv6_udp_l4dst,
-                                   mac_ipv4_gtpu_ipv6_udp_all]
-
-mac_ipv4_gtpu_ipv6_tcp_toeplitz = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')
-                                        .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')
-                                        .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))
-                                   for element in mac_ipv4_gtpu_ipv6_udp_toeplitz]
-
-mac_ipv4_gtpu_eh_dl_ipv4_basic = {
-    'gtpogre-ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/("X"*480)',
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt = eval(
-    str(mac_ipv4_gtpu_eh_dl_ipv4_basic).replace('192.168.0.2', '192.168.1.2'))
-mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt = eval(
-    str(mac_ipv4_gtpu_eh_dl_ipv4_basic).replace('192.168.0.1', '192.168.1.1'))
-
-mac_ipv4_gtpu_eh_dl_ipv4_l3dst_only = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_l3dst',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.16", dst="1.1.2.17")/UDP(dport=2, sport=14)',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_eh_dl_ipv4_l3src_only = eval(str(mac_ipv4_gtpu_eh_dl_ipv4_l3dst_only)
-                                           .replace('eh_dl_ipv4_l3dst', 'eh_ul_ipv4_l3src')
-                                           .replace('l3-dst-only', 'l3-src-only')
-                                           .replace('check_hash_same', 'hash_check_different')
-                                           .replace('check_hash_different', 'check_hash_same')
-                                           .replace('hash_check_different', 'check_hash_different'))
-mac_ipv4_gtpu_eh_dl_ipv4_all = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_all',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.17")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
-    ],
-    'post-test': []
-}
-
-
-mac_ipv4_gtpu_eh_dl_ipv4 = [mac_ipv4_gtpu_eh_dl_ipv4_l3dst_only, mac_ipv4_gtpu_eh_dl_ipv4_l3src_only,
-                            mac_ipv4_gtpu_eh_dl_ipv4_all]
-
-mac_ipv4_gtpu_eh_ul_ipv4 = [eval(str(element).replace('(type=1', '(type=2')
-                            .replace('(type=0', '(type=1').replace('(type=2', '(type=0')
-                            .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')
-                            .replace('eh_dl', 'eh_ul'))
-                            for element in mac_ipv4_gtpu_eh_dl_ipv4]
-
-mac_ipv4_gtpu_eh_ipv4_toeplitz = mac_ipv4_gtpu_eh_dl_ipv4 + mac_ipv4_gtpu_eh_ul_ipv4
-
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic = {
-    'gtpogre-ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/("X"*480)',
-    'gtpogre-ipv4-nonfrag_ul': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/("X"*480)',
-}
-
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic).replace('192.168.0.2', '192.168.1.2'))
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic).replace('192.168.0.1', '192.168.1.1'))
-
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_only = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['gtpogre-ipv4-nonfrag'].replace('0x123456', '0x12345'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.17")/UDP(dport=2, sport=14)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_only = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_only)
-                                           .replace('ul_dl_ipv4_l3dst', 'ul_dl_ipv4_l3src')
-                                           .replace('l3-dst-only', 'l3-src-only')
-                                           .replace('dst="192.168.0.1",src="192.168.1.2"', 'dst="192.168.0.1",src="192.168.1.3"')
-                                           .replace('dst="192.168.1.1",src="192.168.0.2"', 'dst="192.168.0.1",src="192.168.1.2"')
-                                           .replace('dst="192.168.0.1",src="192.168.1.3"', 'dst="192.168.1.1",src="192.168.0.2"')
-                                                      )
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_all = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_all',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.16", dst="1.1.2.17")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_gtpu = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_gtpu',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types gtpu end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['gtpogre-ipv4-nonfrag'].replace('0x123456', '0x12345'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['gtpogre-ipv4-nonfrag'].replace('192.168.0.', '192.168.1.'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.17")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['gtpogre-ipv4-nonfrag_ul'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['gtpogre-ipv4-nonfrag_ul'].replace('0x123456', '0x12345'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['gtpogre-ipv4-nonfrag_ul'].replace('192.168.0.', '192.168.1.'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.17")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_toeplitz = [mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_only,
-                                                mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_only,
-                                                mac_ipv4_gtpu_eh_without_ul_dl_ipv4_all]
-
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic = {
-    'gtpogre-dl': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=22, dport=23)/("X"*480)',
-    'gtpogre-ul': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=22, dport=23)/("X"*480)',
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_only = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3srcl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3srcl4src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-ul'],
-            'action': 'check_hash_same',
-        },
-        {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-ul'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('192.168.0.2', '192.168.1.2')
-                                                                              .replace('sport=22, dport=23',
-                                                                                       'sport=32, dport=33'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-ul'].replace('192.168.0.2', '192.168.1.2')
-                .replace('sport=22, dport=23',
-                         'sport=32, dport=33'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
-    ],
-    'post-test': []
-}
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_only = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_only)
-                                                      .replace('ul_dl_ipv4_udp_l3dst', 'ul_dl_ipv4_udp_l3src')
-                                                      .replace('l3-dst-only', 'l3-src-only')
-                                                      .replace('dst="192.168.0.1",src="192.168.1.2"', 'dst="192.168.0.1",src="192.168.1.3"')
-                                                      .replace('dst="192.168.1.1",src="192.168.0.2"', 'dst="192.168.0.1",src="192.168.1.2"')
-                                                      .replace('dst="192.168.0.1",src="192.168.1.3"', 'dst="192.168.1.1",src="192.168.0.2"')
-                                                      )
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-ul'].replace('sport=22', 'sport=32'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('192.168.0.1', '192.168.1.1')
-                .replace('dport=23', 'dport=33')
-                .replace('0x123456', '0x12345'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-ul'].replace('192.168.0.1', '192.168.1.1')
-                .replace('dport=23', 'dport=33')
-                .replace('0x123456', '0x12345'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
-    ],
-    'post-test': []
-}
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4dst = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src)
-                                                           .replace('udp_l3src_l4src', 'udp_l3src_l4dst')
-                                                           .replace('l4-src-only', 'l4-dst-only')
-                                                           .replace('sport=32, dport=23', 'sport=22, dport=34')
-                                                           .replace('sport=22, dport=33', 'sport=32, dport=23')
-                                                           )
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4src = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src)
-                                                           .replace('udp_l3src_l4src', 'udp_l3dst_l4src')
-                                                           .replace('l3-src-only', 'l3-dst-only')
-                                                           .replace('dst="192.168.0.1",src="192.168.1.2"', 'dst="192.168.0.1",src="192.168.1.3"')
-                                                           .replace('dst="192.168.1.1",src="192.168.0.2"', 'dst="192.168.0.1",src="192.168.1.2"')
-                                                           .replace('dst="192.168.0.1",src="192.168.1.3"', 'dst="192.168.1.1",src="192.168.0.2"')
-                                                           )
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4dst = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4src)
-                                                           .replace('udp_l3dst_l4src', 'udp_l3dst_l4dst')
-                                                           .replace('l3-src-only', 'l3-dst-only')
-                                                           .replace('l4-src-only', 'l4-dst-only')
-                                                           .replace('sport=32, dport=23', 'sport=22, dport=34')
-                                                           .replace('sport=22, dport=33', 'sport=32, dport=23')
-                                                           )
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-ul'].replace('sport=22', 'sport=32'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('192.168.0', '192.168.1')
-            .replace('dport=23', 'dport=33')
-            .replace('0x123456', '0x12345'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-ul'].replace('192.168.0', '192.168.1')
-            .replace('dport=23', 'dport=33')
-            .replace('0x123456', '0x12345'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4dst_only = eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only)
-                                                          .replace('udp_l4src_only', 'udp_l4dst_only')
-                                                          .replace('l4-src-only', 'l4-dst-only')
-                                                          .replace('sport=32, dport=23', 'sport=22, dport=34')
-                                                          .replace('sport=22, dport=33', 'sport=32, dport=23')
-                                                          )
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3srcl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3srcl4dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / 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_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('sport=22', 'sport=32'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('192.168.0.1', '192.168.1.1'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('192.168.0.2', '192.168.1.2'),
-            'action': 'check_hash_different',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('0x123456', '0x12345'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3 = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'],
-            'action': 'save_hash',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-ul'],
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=2, sport=14)',
             'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('192.168.0.1', '192.168.1.1'),
-            'action': 'check_hash_different',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('192.168.0.2', '192.168.1.2'),
-            'action': 'check_hash_different',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-ul'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-ul'].replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-dl'].replace('sport=22, dport=23', 'sport=12, dport=13'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=2, sport=14)',
             'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['gtpogre-ul'].replace('sport=22, dport=23', 'sport=12, dport=13'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz = [
-    mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_only,
-    mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_only,
-    mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4dst,
-    mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4src,
-    mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src,
-    mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4dst,
-    mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only,
-    mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4dst_only,
-    mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp,
-    mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3,
-]
-
-mac_ipv4_gtpu_eh_without_ul_dl_ipv4_tcp_toeplitz = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')
-                                           .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')
-                                           .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))
-                                      for element in mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz]
-
-mac_ipv4_gtpu_eh_without_ul_dl_ipv6_toeplitz = [eval(str(element).replace('gtp_psc / ipv4', 'gtp_psc / ipv6')
-                                                     .replace('types ipv4', 'types ipv6')
-                                                     .replace('ul_dl_ipv4', 'ul_dl_ipv6')
-                                                     .replace(', frag=6)', ')/IPv6ExtHdrFragment()')
-                                                     .replace('IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(dst="192.168.0.3", src="192.168.0.3"',)
-                                                     .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                                     .replace('IP(dst="192.168.1.1",src="192.168.0.2"', 'IPv6(dst="1212:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                                     .replace('IP(dst="192.168.0.1",src="192.168.1.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="3434:910A:2222:5498:8475:1111:3900:2020"')
-                                                     .replace('IP(dst="192.168.1.1",src="192.168.1.2"', 'IPv6(dst="1212:910B:6666:3457:8295:3333:1800:2929",src="3434:910A:2222:5498:8475:1111:3900:2020"')
-                                                     .replace('IP(dst="192.168.0.3",src="192.168.0.3"', 'IP(dst="192.168.0.1",src="192.168.0.2"'))
-                                                for element in mac_ipv4_gtpu_eh_without_ul_dl_ipv4_toeplitz]
-
-mac_ipv4_gtpu_eh_without_ul_dl_ipv6_udp_toeplitz = [eval(str(element).replace('gtp_psc / ipv4', 'gtp_psc / ipv6')
-                                                         .replace('ipv4-udp', 'ipv6-udp')
-                                                         .replace('types ipv4', 'types ipv6')
-                                                         .replace('ul_dl_ipv4_udp', 'ul_dl_ipv6_udp')
-                                                         .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                                         .replace('IP(dst="192.168.1.1",src="192.168.0.2"', 'IPv6(dst="1212:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                                         .replace('IP(dst="192.168.0.1",src="192.168.1.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="3434:910A:2222:5498:8475:1111:3900:2020"')
-                                                         .replace('IP(dst="192.168.1.1",src="192.168.1.2"', 'IPv6(dst="1212:910B:6666:3457:8295:3333:1800:2929",src="3434:910A:2222:5498:8475:1111:3900:2020"'))
-                                                    for element in mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz]
-
-mac_ipv4_gtpu_eh_without_ul_dl_ipv6_tcp_toeplitz = [eval(str(element).replace('gtp_psc / ipv4', 'gtp_psc / ipv6')
-                                                         .replace('ipv4 / tcp', 'ipv6 / tcp')
-                                                         .replace('types ipv4', 'types ipv6')
-                                                         .replace('ipv4-tcp', 'ipv6-tcp')
-                                                         .replace('ul_dl_ipv4_tcp', 'ul_dl_ipv6_tcp')
-                                                         .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                                         .replace('IP(dst="192.168.1.1",src="192.168.0.2"', 'IPv6(dst="1212:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                                         .replace('IP(dst="192.168.0.1",src="192.168.1.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="3434:910A:2222:5498:8475:1111:3900:2020"')
-                                                         .replace('IP(dst="192.168.1.1",src="192.168.1.2"', 'IPv6(dst="1212:910B:6666:3457:8295:3333:1800:2929",src="3434:910A:2222:5498:8475:1111:3900:2020"'))
-                                                    for element in mac_ipv4_gtpu_eh_without_ul_dl_ipv4_tcp_toeplitz]
-
-mac_ipv4_gtpu_eh_dl_ipv4_udp_basic = {
-        'gtpogre-ipv4-udp': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
-}
-mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dstl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dstl4src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / 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_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src = eval(str(mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst)
-                                          .replace('mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst',
-                                                   'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src')
-                                          .replace('l3-dst-only', 'l3-src-only')
-                                          .replace('check_hash_same', 'hash_check_different')
-                                          .replace('check_hash_different', 'check_hash_same')
-                                          .replace('hash_check_different', 'check_hash_different'))
-
-mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4src',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33').replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4dst',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=32').replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4src',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dstl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dstl4dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / 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_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33').replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=2, sport=14)',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4dst',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=32')
-                                                             .replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=2, sport=14)',
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': []
-}
-mac_ipv4_gtpu_eh_dl_ipv4_udp_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l4dst',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-dl'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=32')
-                                                             .replace('192.168.0', '192.168.1'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
         },
-    ],
-    'post-test': []
-}
-mac_ipv4_gtpu_eh_dl_ipv4_udp_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l4src',
-    'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',
-    'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'],
-            'action': 'save_hash',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=32'),
-            'action': 'check_hash_different',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
+    ],
+    'post-test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=32')
-                                                             .replace('192.168.0', '192.168.1'),
-            'action': 'check_hash_same',
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
         },
-    ],
-    'post-test': []
+    ]
 }
 
-mac_ipv4_gtpu_eh_dl_ipv4_udp_all = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_all',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_all',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_basic['gtpogre-ipv4-nonfrag'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=32'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.2', '192.168.1.2'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
             'action': 'check_hash_different',
         },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.7")/UDP(dport=2, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv4_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_toeplitz = [mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dst_only, mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3src_only,
+                                               mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4dst_only, mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l4src_only,
+                                               mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dstl4dst, mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3srcl4dst,
+                                               mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3dstl4src, mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_l3srcl4src,
+                                               mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_all]
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp_toeplitz = [eval(str(element).replace('_udp', '_tcp')
+                                        .replace('ipv4-udp', 'ipv4-tcp')
+                                        .replace('TCP(sport', 'UDP(sport')
+                                        .replace('UDP(dport', 'TCP(dport')
+                                        .replace('gtp_psc / ipv4 / udp', 'gtp_psc / ipv4 / tcp'))
+                                   for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_toeplitz]
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_basic = {
+    'gtpogre-ipv4-ul': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.7")',
 }
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv4_basic).replace('1.1.2.6', '1.1.2.16'))
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv4_basic).replace('1.1.2.7', '1.1.2.17'))
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+]
 
-mac_ipv4_gtpu_eh_dl_ipv4_udp_l3 = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3',
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4 end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.1', '192.168.1.1'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('192.168.0.2', '192.168.1.2'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic['gtpogre-ipv4-udp'].replace('sport=22', 'sport=12').replace('dport=23', 'dport=13'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
-    'post-test': []
-}
-
-mac_ipv4_gtpu_eh_dl_ipv4_udp_toeplitz = [mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst, mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src,
-                                         mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4src,
-                                         mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4dst,
-                                         mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4src,
-                                         mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4dst,
-                                         mac_ipv4_gtpu_eh_dl_ipv4_udp_l4src, mac_ipv4_gtpu_eh_dl_ipv4_udp_l4dst,
-                                         mac_ipv4_gtpu_eh_dl_ipv4_udp_all, mac_ipv4_gtpu_eh_dl_ipv4_udp_l3]
-
-mac_ipv4_gtpu_eh_ul_ipv4_udp_toeplitz = [eval(str(element).replace('(type=1', '(type=2')
-                                                          .replace('(type=0', '(type=1').replace('(type=2', '(type=0')
-                                                          .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')
-                                                          .replace('eh_dl', 'eh_ul'))
-                                         for element in mac_ipv4_gtpu_eh_dl_ipv4_udp_toeplitz]
-
-mac_ipv4_gtpu_eh_ipv4_udp_toeplitz = mac_ipv4_gtpu_eh_dl_ipv4_udp_toeplitz + mac_ipv4_gtpu_eh_ul_ipv4_udp_toeplitz
-
-mac_ipv4_gtpu_eh_ipv4_tcp_toeplitz = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')
-                                                       .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')
-                                                       .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))
-                                      for element in mac_ipv4_gtpu_eh_ipv4_udp_toeplitz]
-
-mac_ipv4_gtpu_eh_dl_ipv6_basic = {
-    'gtpogre-ipv6-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_basic['gtpogre-ipv4-ul'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt = eval(str(mac_ipv4_gtpu_eh_dl_ipv6_basic).replace('ABAB', '1212'))
-mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt = eval(str(mac_ipv4_gtpu_eh_dl_ipv6_basic).replace('CDCD', '3434'))
-
-mac_ipv4_gtpu_eh_dl_ipv6_l3dst_only = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_l3dst',
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / 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',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['gtpogre-ipv6-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['gtpogre-ipv6-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['gtpogre-ipv6-nonfrag'],
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_basic['gtpogre-ipv4-ul'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_dl_ipv6_l3src_only = eval(str(mac_ipv4_gtpu_eh_dl_ipv6_l3dst_only)
-                                           .replace('mac_ipv4_gtpu_eh_dl_ipv6_l3dst', 'mac_ipv4_gtpu_eh_dl_ipv6_l3src')
-                                           .replace('l3-dst-only', 'l3-src-only')
-                                           .replace('check_hash_same', 'hash_check_different')
-                                           .replace('check_hash_different', 'check_hash_same')
-                                           .replace('hash_check_different', 'check_hash_different'))
-mac_ipv4_gtpu_eh_dl_ipv6_all = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_all',
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_all',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['gtpogre-ipv6-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['gtpogre-ipv6-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['gtpogre-ipv6-nonfrag'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['gtpogre-ipv6-nonfrag'].replace('ABAB', '1212').replace('CDCD', '3434'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.7")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_basic['gtpogre-ipv4-ul'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_dl_ipv6_toeplitz = [mac_ipv4_gtpu_eh_dl_ipv6_l3dst_only, mac_ipv4_gtpu_eh_dl_ipv6_l3src_only,
-                                     mac_ipv4_gtpu_eh_dl_ipv6_all]
-
-mac_ipv4_gtpu_eh_ul_ipv6_toeplitz = [eval(str(element).replace('(type=1', '(type=2')
-                                                      .replace('(type=0', '(type=1').replace('(type=2', '(type=0')
-                                                      .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')
-                                                      .replace('eh_dl', 'eh_ul'))
-                                     for element in mac_ipv4_gtpu_eh_dl_ipv6_toeplitz]
-
-mac_ipv4_gtpu_eh_ipv6_toeplitz = mac_ipv4_gtpu_eh_dl_ipv6_toeplitz + mac_ipv4_gtpu_eh_ul_ipv6_toeplitz
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_toeplitz = [mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3dst_only, mac_ipv4_gre_ipv4_gtpu_ul_ipv4_l3src_only,
+                                           mac_ipv4_gre_ipv4_gtpu_ul_ipv4_all]
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic = {
+    'gtpogre-ipv4-ul': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.7")/UDP(dport=2, sport=4)',
+    }
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic).replace('1.1.2.6', '1.1.2.16'))
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic).replace('1.1.2.7', '1.1.2.17'))
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic).replace('sport=4', 'sport=14'))
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic).replace('dport=2', 'dport=12'))
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(dport=2, sport=4)/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.7")/TCP(sport=4, dport=2)'
+]
 
-mac_ipv4_gtpu_eh_dl_ipv6_udp_basic = {
-        'gtpogre-ipv6-udp': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
-}
-mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst',
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('CDCD', '3434'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('ABAB', '1212'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=12, sport=14)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src = eval(str(mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst)
-                                          .replace('mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst', 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src')
-                                          .replace('l3-dst-only', 'l3-src-only')
-                                          .replace('check_hash_same', 'hash_check_different')
-                                          .replace('check_hash_different', 'check_hash_same')
-                                          .replace('hash_check_different', 'check_hash_different'))
-
-mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4src',
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / 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',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('ABAB', '1212'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=33'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33').replace('CDCD', '3434'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4dst',
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('ABAB', '1212'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.17")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=32').replace('CDCD', '3434'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4src',
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('CDCD', '3434'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=33'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.17")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33').replace('ABAB', '1212'),
-            'action': 'check_hash_same',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4dst',
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3srcl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3srcl4src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / 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_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('CDCD', '3434'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=32').replace('ABAB', '1212'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
-mac_ipv4_gtpu_eh_dl_ipv6_udp_l4dst = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l4dst',
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3srcl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3srcl4dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / 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_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=32')
-                                                       .replace('ABAB', '1212').replace('CDCD', '3434'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.17")/UDP(dport=2, sport=14)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
-mac_ipv4_gtpu_eh_dl_ipv6_udp_l4src = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l4src',
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dstl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dstl4src',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / 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_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=32'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=32')
-                                                       .replace('ABAB', '1212').replace('CDCD', '3434'),
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=12, sport=4)',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_dl_ipv6_udp_all = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_all',
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dstl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dstl4dst',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / 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_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'],
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('sport=22', 'sport=32'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('dport=23', 'dport=33'),
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('CDCD', '3434'),
-            'action': 'check_hash_different',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.16", dst="1.1.2.7")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic['gtpogre-ipv6-udp'].replace('ABAB', '1212'),
-            'action': 'check_hash_different',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
         },
     ],
-    'post-test': []
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
 }
 
-mac_ipv4_gtpu_eh_dl_ipv6_udp_toeplitz = [mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst, mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src,
-                                         mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4src,
-                                         mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4dst,
-                                         mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4src,
-                                         mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4dst,
-                                         mac_ipv4_gtpu_eh_dl_ipv6_udp_l4src, mac_ipv4_gtpu_eh_dl_ipv6_udp_l4dst,
-                                         mac_ipv4_gtpu_eh_dl_ipv6_udp_all]
-mac_ipv4_gtpu_eh_ul_ipv6_udp_toeplitz = [eval(str(element).replace('(type=1', '(type=2')
-                                                          .replace('(type=0', '(type=1').replace('(type=2', '(type=0')
-                                                          .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_t is 1')
-                                                          .replace('eh_dl', 'eh_ul'))
-                                         for element in mac_ipv4_gtpu_eh_dl_ipv6_udp_toeplitz]
-mac_ipv4_gtpu_eh_ipv6_udp_toeplitz = mac_ipv4_gtpu_eh_dl_ipv6_udp_toeplitz + mac_ipv4_gtpu_eh_ul_ipv6_udp_toeplitz
-
-mac_ipv4_gtpu_eh_ipv6_tcp_toeplitz = [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp')
-                                                       .replace('UDP(sport', 'TCP(sport').replace('TCP1', 'UDP')
-                                                       .replace('ipv4 / tcp / gtpu', 'ipv4 / udp / gtpu'))
-                                      for element in mac_ipv4_gtpu_eh_ipv6_udp_toeplitz]
-
-inner_l4_mac_ipv4_gtpu_ipv4_udp_tcp = {
-    'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_tcp',
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_all',
     'port_id': 0,
-    'rule': [
-       'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',
-       'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / tcp / end actions rss types ipv4-tcp end key_len 0 queues end / end',
-    ],
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
-    ],
-    'post-test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
-            'action': 'save_or_no_hash',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)',
-            'action': 'check_hash_same_or_no_hash',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.6", dst="1.1.2.7")/UDP(dport=2, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv4_basic['gtpogre-ipv4-ul'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_toeplitz = [mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dst_only, mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3src_only,
+                                               mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4dst_only, mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l4src_only,
+                                               mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dstl4dst, mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3srcl4dst,
+                                               mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3dstl4src, mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_l3srcl4src,
+                                               mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_all]
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_toeplitz = [eval(str(element).replace('_udp', '_tcp')
+                                        .replace('TCP(sport', 'UDP(sport')
+                                        .replace('UDP(dport', 'TCP(dport')
+                                        .replace('gtp_psc pdu_t is 1 / ipv4 / udp', 'gtp_psc pdu_t is 1 / ipv4 / tcp')
+                                        .replace('ipv4-udp', 'ipv4-tcp'))
+                                   for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_toeplitz]
+
+mac_ipv4_gre_ipv4_gtpu_dl_ipv4_toeplitz = [eval(str(element).replace('_ul_', '_dl_')
+                                           .replace('gtp_psc pdu_t is 1', 'gtp_psc pdu_t is 0')
+                                           .replace('type=1', 'type=0'))
+                                   for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_toeplitz]
+
+mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp_toeplitz = [eval(str(element).replace('_ul_', '_dl_')
+                                           .replace('gtp_psc pdu_t is 1', 'gtp_psc pdu_t is 0')
+                                           .replace('type=1', 'type=0'))
+                                   for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_toeplitz]
+
+mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp_toeplitz = [eval(str(element).replace('_ul_', '_dl_')
+                                           .replace('gtp_psc pdu_t is 1', 'gtp_psc pdu_t is 0')
+                                           .replace('type=1', 'type=0'))
+                                   for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_toeplitz]
+# global variable
+ipv4_case_name = 'mac_ipv4_gre_ipv4'
+ipv4_rule = '/ ipv4 / gre / ipv4 /'
+ipv4_match_ip1 = 'IP(src="1.1.2.2", dst="1.1.2.3")'
+ipv4_match_ip2 = 'IP(src="1.1.2.4", dst="1.1.2.5")'
+ipv4_mismatch_ip1 = 'IP(src="1.1.2.12", dst="1.1.2.13")'
+ipv4_mismatch_ip2 = 'IP(src="1.1.2.14", dst="1.1.2.15")'
+
+# new global variable
+ipv6_ipv4_name = 'mac_ipv6_gre_ipv4'
+ipv6_ipv4_rule = '/ ipv6 / gre / ipv4 /'
+ipv4_ipv6_name = 'mac_ipv4_gre_ipv6'
+ipv4_ipv6_rule = '/ ipv4 / gre / ipv6 /'
+ipv6_ipv6_name = 'mac_ipv6_gre_ipv6'
+ipv6_ipv6_rule = '/ ipv6 / gre / ipv6 /'
+
+ipv6_match_ip1 = 'IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2927",dst="CDCD:910A:2222:5498:8475:1111:3900:2022")'
+ipv6_mismatch_ip1 = 'IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2922",dst="CDCD:910A:2222:5498:8475:1111:3900:2023")'
+ipv6_match_ip2 = 'IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")'
+ipv6_mismatch_ip2 = 'IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2924",dst="CDCD:910A:2222:5498:8475:1111:3900:2025")'
+
+# ipv6+ipv4+ipv4
+mac_ipv6_gre_ipv4_gtpu_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv4_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv4_udp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv4_tcp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_eh_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv4_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_eh_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_eh_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_ul_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_ul_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_ul_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_dl_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv4_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_dl_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_dl_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp_toeplitz]
+
+# ipv4+ipv6+ipv4
+mac_ipv4_gre_ipv6_gtpu_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv4_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv4_udp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv4_tcp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_eh_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv4_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_eh_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_eh_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_ul_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_ul_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_ul_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_dl_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv4_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_dl_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_dl_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp_toeplitz]
+
+# ipv6+ipv6+ipv4
+mac_ipv6_gre_ipv6_gtpu_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv4_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv4_udp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv4_tcp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_eh_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv4_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_eh_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_eh_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_ul_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_ul_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_ul_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_dl_ipv4_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv4_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_dl_ipv4_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_dl_ipv4_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp_toeplitz]
+# ipv4+ipv4+ipv6
+mac_ipv4_gre_ipv4_gtpu_ipv6_basic = {
+    'gtpogre-ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv6_basic).replace('ABAB:910B:6666:3457:8295:3333:1800:2929', 'ABAB:910B:6666:3457:8295:3333:1800:2926'))
+mac_ipv4_gre_ipv4_gtpu_ipv6_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv6_basic).replace('CDCD:910A:2222:5498:8475:1111:3900:2020', 'CDCD:910A:2222:5498:8475:1111:3900:2027'))
+mac_ipv4_gre_ipv4_gtpu_ipv6_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+]
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_l3dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_l3src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_l3src_changed_pkt['gtpogre-ipv4-nonfrag'].replace('CDCD:910A:2222:5498:8475:1111:3900:2020', 'CDCD:910A:2222:5498:8475:1111:3900:2027'),
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_toeplitz = [mac_ipv4_gre_ipv4_gtpu_ipv6_l3dst_only, mac_ipv4_gre_ipv4_gtpu_ipv6_l3src_only,
+                                        mac_ipv4_gre_ipv4_gtpu_ipv6_all]
+
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic = {
+    'gtpogre-ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)',
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic).replace('ABAB:910B:6666:3457:8295:3333:1800:2929', 'ABAB:910B:6666:3457:8295:3333:1800:2926'))
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic).replace('CDCD:910A:2222:5498:8475:1111:3900:2020', 'CDCD:910A:2222:5498:8475:1111:3900:2027'))
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic).replace('sport=4', 'sport=14'))
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic).replace('dport=2', 'dport=12'))
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34) /IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=4, dport=2)/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)/("X"*480)',
+]
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3srcl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3srcl4src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / 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_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3srcl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3srcl4dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / 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_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dstl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dstl4src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / 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_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dstl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dstl4dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / 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_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv6_udp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_udp_toeplitz = [mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dst_only, mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3src_only,
+                                            mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4dst_only, mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l4src_only,
+                                            mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dstl4dst, mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3srcl4dst,
+                                            mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3dstl4src, mac_ipv4_gre_ipv4_gtpu_ipv6_udp_l3srcl4src,
+                                            mac_ipv4_gre_ipv4_gtpu_ipv6_udp_all]
+
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_tcp_toeplitz = [eval(str(element).replace('_udp', '_tcp')
+                                        .replace('TCP(sport', 'UDP(sport')
+                                        .replace('UDP(dport', 'TCP(dport')
+                                        .replace('gtpu / ipv6 / udp', 'gtpu / ipv6 / tcp')
+                                        .replace('ipv6-udp', 'ipv6-tcp'))
+                                   for element in mac_ipv4_gre_ipv4_gtpu_ipv6_udp_toeplitz]
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic = {
+    'gtpogre-ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+    'gtpogre-ipv4-ul': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+    'gtpogre-ipv4-dl': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+}
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic).replace('ABAB:910B:6666:3457:8295:3333:1800:2929', 'ABAB:910B:6666:3457:8295:3333:1800:2926'))
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic).replace('CDCD:910A:2222:5498:8475:1111:3900:2020', 'CDCD:910A:2222:5498:8475:1111:3900:2027'))
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer()/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+]
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3dst_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3src_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_toeplitz = [mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3dst_only, mac_ipv4_gre_ipv4_gtpu_eh_ipv6_l3src_only,
+                                           mac_ipv4_gre_ipv4_gtpu_eh_ipv6_all]
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic = {
+    'gtpogre-ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)',
+    'gtpogre-ipv4-ul': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)',
+    'gtpogre-ipv4-dl': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)',
+}
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic).replace('ABAB:910B:6666:3457:8295:3333:1800:2929', 'ABAB:910B:6666:3457:8295:3333:1800:2926'))
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic).replace('CDCD:910A:2222:5498:8475:1111:3900:2020', 'CDCD:910A:2222:5498:8475:1111:3900:2027'))
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic).replace('sport=4', 'sport=14'))
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic).replace('dport=2', 'dport=12'))
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(dport=2, sport=4)/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.7")/UDP(dport=2, sport=4)/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=4, dport=2)'
+]
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv6 / udp / end actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3srcl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3srcl4src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / 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_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3srcl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3srcl4dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / 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_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dstl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dstl4src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / 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_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dstl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dstl4dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / 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_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-dl'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-dl'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_basic['gtpogre-ipv4-nonfrag'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-nonfrag'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_eh_ipv6_basic['gtpogre-ipv4-nonfrag'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_toeplitz = [mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dst_only, mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3src_only,
+                                               mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4dst_only, mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l4src_only,
+                                               mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dstl4dst, mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3srcl4dst,
+                                               mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3dstl4src, mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_l3srcl4src,
+                                               mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_all]
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp_toeplitz = [eval(str(element).replace('_udp', '_tcp')
+                                        .replace('TCP(sport', 'UDP(sport')
+                                        .replace('UDP(dport', 'TCP(dport')
+                                        .replace('gtp_psc / ipv6 / udp', 'gtp_psc / ipv6 / tcp')
+                                        .replace('ipv6-udp', 'ipv6-tcp'))
+                                   for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_toeplitz]
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_basic = {
+    'gtpogre-ipv4-ul': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+}
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv6_basic).replace('ABAB:910B:6666:3457:8295:3333:1800:2929', 'ABAB:910B:6666:3457:8295:3333:1800:2926'))
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv6_basic).replace('CDCD:910A:2222:5498:8475:1111:3900:2020', 'CDCD:910A:2222:5498:8475:1111:3900:2027'))
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
+]
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_basic['gtpogre-ipv4-ul'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_basic['gtpogre-ipv4-ul'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_basic['gtpogre-ipv4-ul'],
+            ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_toeplitz = [mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3dst_only, mac_ipv4_gre_ipv4_gtpu_ul_ipv6_l3src_only,
+                                           mac_ipv4_gre_ipv4_gtpu_ul_ipv6_all]
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic = {
+    'gtpogre-ipv4-ul': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)',
+    }
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic).replace('ABAB:910B:6666:3457:8295:3333:1800:2929', 'ABAB:910B:6666:3457:8295:3333:1800:2926'))
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic).replace('CDCD:910A:2222:5498:8475:1111:3900:2020', 'CDCD:910A:2222:5498:8475:1111:3900:2027'))
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4src_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic).replace('sport=4', 'sport=14'))
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4dst_changed_pkt = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic).replace('dport=2', 'dport=12'))
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_unmatched_pkt = [
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(dport=2, sport=4)/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer()/IP(src="1.1.2.6", dst="1.1.2.7")/UDP(dport=2, sport=4)/("X"*480)',
+    'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.2", dst="1.1.2.3")/GRE()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=4, dport=2)'
+]
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv6 / udp / end actions rss types ipv6-udp l3-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4dst_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4src_only = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3srcl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3srcl4src',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / 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_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3srcl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3srcl4dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / 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_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2027")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
         },
     ]
 }
-inner_l4_mac_ipv6_gtpu_ipv4_udp_tcp = eval(str(inner_l4_mac_ipv4_gtpu_ipv4_udp_tcp)
-                                           .replace('eth / ipv4', 'eth / ipv6')
-                                           .replace('gtpu / ipv4', 'gtpu / gtp_psc / ipv4')
-                                           .replace('IP()', 'IPv6()')
-                                           .replace('teid=0x123456)', 'teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)')
-                                           .replace('mac_ipv4', 'mac_ipv6')
-                                           .replace('IP(proto=0x2F)/GRE(proto=0x0800)', 'IPv6(nh=0x2F)/GRE(proto=0x86DD)'))
-inner_l4_mac_ipv4_gtpu_eh_ipv6_udp_tcp = {
-    'sub_casename': 'inner_l4_mac_ipv4_gtpu_eh_ipv6_udp_tcp',
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dstl4src = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dstl4src',
     'port_id': 0,
-    'rule': [
-        'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',
-        'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / 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_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=12, sport=4)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dstl4dst = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dstl4dst',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
             'action': 'save_hash',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
             'action': 'check_hash_different',
         },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2926",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=14)',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
     ],
     'post-test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)',
-            'action': 'save_or_no_hash',
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+                ],
+            'action': 'check_no_hash',
+        },
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_all = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_all',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / end',
+    'test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_basic['gtpogre-ipv4-ul'],
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4src_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4dst_changed_pkt['gtpogre-ipv4-ul'],
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.12", dst="1.1.2.13")/GRE()/IP(src="1.1.2.14", dst="1.1.2.15")/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(dport=2, sport=4)',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)',
-            'action': 'check_hash_same_or_no_hash',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_unmatched_pkt,
+            'action': 'check_no_hash',
+        },
+    ],
+    'post-test': [
+        {
+            'send_packet': [
+                mac_ipv4_gre_ipv4_gtpu_ul_ipv6_basic['gtpogre-ipv4-ul'],
+            ],
+            'action': 'check_no_hash',
         },
     ]
 }
-inner_l4_mac_ipv6_gtpu_eh_ipv6_udp_tcp = eval(str(inner_l4_mac_ipv4_gtpu_eh_ipv6_udp_tcp)
-                                              .replace('eth / ipv4', 'eth / ipv6')
-                                              .replace('pdu_t is 0', 'pdu_t is 1')
-                                              .replace('(type=0', '(type=1')
-                                              .replace('IP()', 'IPv6()')
-                                              .replace('mac_ipv4', 'mac_ipv6')
-                                              .replace('IP(proto=0x2F)/GRE(proto=0x0800)', 'IPv6(nh=0x2F)/GRE(proto=0x86DD)'))
-inner_l4_protocal_hash = [inner_l4_mac_ipv4_gtpu_ipv4_udp_tcp, inner_l4_mac_ipv6_gtpu_ipv4_udp_tcp,
-                          inner_l4_mac_ipv4_gtpu_eh_ipv6_udp_tcp, inner_l4_mac_ipv6_gtpu_eh_ipv6_udp_tcp]
 
-mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric',
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_toeplitz = [mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dst_only, mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3src_only,
+                                               mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4dst_only, mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l4src_only,
+                                               mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dstl4dst, mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3srcl4dst,
+                                               mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3dstl4src, mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_l3srcl4src,
+                                               mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_all]
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_toeplitz = [eval(str(element).replace('_udp', '_tcp')
+                                            .replace('TCP(sport', 'UDP(sport')
+                                            .replace('UDP(dport', 'TCP(dport')
+                                            .replace('gtp_psc pdu_t is 1 / ipv6 / udp', 'gtp_psc pdu_t is 1 / ipv6 / tcp')
+                                            .replace('ipv6-udp', 'ipv6-tcp'))
+                                    for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_toeplitz]
+
+mac_ipv4_gre_ipv4_gtpu_dl_ipv6_toeplitz = [eval(str(element).replace('_ul_', '_dl_')
+                                           .replace('gtp_psc pdu_t is 1', 'gtp_psc pdu_t is 0')
+                                           .replace('type=1', 'type=0'))
+                                   for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_toeplitz]
+
+mac_ipv4_gre_ipv4_gtpu_dl_ipv6_udp_toeplitz = [eval(str(element).replace('_ul_', '_dl_')
+                                           .replace('gtp_psc pdu_t is 1', 'gtp_psc pdu_t is 0')
+                                           .replace('type=1', 'type=0'))
+                                   for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_toeplitz]
+
+mac_ipv4_gre_ipv4_gtpu_dl_ipv6_tcp_toeplitz = [eval(str(element).replace('_ul_', '_dl_')
+                                           .replace('gtp_psc pdu_t is 1', 'gtp_psc pdu_t is 0')
+                                           .replace('type=1', 'type=0'))
+                                   for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_toeplitz]
+
+# ipv4+ipv6+ipv6
+mac_ipv4_gre_ipv6_gtpu_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv6_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv6_udp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv6_tcp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_eh_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv6_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_eh_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_eh_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_ul_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_ul_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_ul_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_dl_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv6_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_dl_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv6_udp_toeplitz]
+
+mac_ipv4_gre_ipv6_gtpu_dl_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv4_ipv6_name)
+                           .replace(ipv4_rule, ipv4_ipv6_rule)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv6_tcp_toeplitz]
+
+# ipv6+ipv4+ipv6
+mac_ipv6_gre_ipv4_gtpu_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv6_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv6_udp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv6_tcp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_eh_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv6_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_eh_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_eh_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_ul_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_ul_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_ul_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_dl_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv6_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_dl_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv6_udp_toeplitz]
+
+mac_ipv6_gre_ipv4_gtpu_dl_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv4_name)
+                           .replace(ipv4_rule, ipv6_ipv4_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1))
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv6_tcp_toeplitz]
+
+# ipv6+ipv6+ipv6
+mac_ipv6_gre_ipv6_gtpu_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv6_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv6_udp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ipv6_tcp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_eh_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv6_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_eh_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_eh_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_ul_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_ul_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_ul_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_dl_ipv6_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv6_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_dl_ipv6_udp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv6_udp_toeplitz]
+
+mac_ipv6_gre_ipv6_gtpu_dl_ipv6_tcp_toeplitz = [eval(str(element).replace(ipv4_case_name, ipv6_ipv6_name)
+                           .replace(ipv4_rule, ipv6_ipv6_rule)
+                           .replace(ipv4_match_ip1, ipv6_match_ip1)
+                           .replace(ipv4_match_ip2, ipv6_match_ip2)
+                           .replace(ipv4_mismatch_ip1, ipv6_mismatch_ip1)
+                           .replace(ipv4_mismatch_ip2, ipv6_mismatch_ip2)
+                           )
+                      for element in mac_ipv4_gre_ipv4_gtpu_dl_ipv6_tcp_toeplitz]
+## symmetric cases
+# IPV4+IPV4+IPV4
+ipv4_mac = 'IP(src="1.1.2.6", dst="1.1.2.7")'
+swap_ipv4_mac = 'IP(src="1.1.2.7", dst="1.1.2.6")'
+
+ipv6_mac = 'IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929", dst="CDCD:910A:2222:5498:8475:1111:3900:2020")'
+swap_ipv6_mac = 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929", src="CDCD:910A:2222:5498:8475:1111:3900:2020")'
+
+mac_ipv4_gre_ipv4_gtpu_ipv4_pkt = {
+    'basic_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/{}'.format(ipv4_mac),
+    'symmetric_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/{}'.format(swap_ipv4_mac)
+}
+
+mac_ipv4_gre_ipv4_gtpu_ipv4_symmetric = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_symmetric',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['basic_packet'],
             'action': {'save_hash': 'gtpogre-ipv4-nonfrag'},
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['symmetric_packet'],
             'action': 'check_hash_same',
         },
-    ],
-    'post-test': [
-        {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/("X"*480)',
-            'action': {'check_no_hash_or_different': 'gtpogre-ipv4-nonfrag'},
+        {   # unmatch MAC_IPV4_GRE_IPV4_GTPU_IPV6
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/{}'.format(ipv6_match_ip2),
+            'action': 'check_no_hash',
+        },
+        {   # unmatch MAC_IPV4_GRE_IPV4_GTPU_EH_IPV4
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/{}'.format(ipv4_mac),
+            'action': 'check_no_hash',
         },
     ],
+    'post_test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['basic_packet'],
+            'action': 'check_no_hash',
+        }
+    ]
 }
 
-mac_ipv4_gtpu_eh_ipv6_without_ul_dl_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric)
-                                                     .replace('gtp_psc / ipv4', 'gtp_psc / ipv6')
-                                                     .replace('types ipv4', 'types ipv6')
-                                                     .replace('gtpu_eh_ipv4', 'gtpu_eh_ipv6')
-                                                     .replace(',frag=6)', ')/IPv6ExtHdrFragment()')
-                                                     .replace('IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(dst="192.168.1.1", src="192.168.1.2"',)
-                                                     .replace('IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(src="192.168.1.1", dst="192.168.1.2"',)
-                                                     .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                                     .replace('IP(dst="192.168.0.2",src="192.168.0.1"', 'IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020",src="ABAB:910B:6666:3457:8295:3333:1800:2929"')
-                                                     )
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt = {
+    'basic_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/{}/UDP(dport=2, sport=4)'.format(ipv4_mac),
+    'symmetric_packet1': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/{}/UDP(dport=2, sport=4)'.format(swap_ipv4_mac),
+    'symmetric_packet2': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/{}/UDP(dport=4, sport=2)'.format(ipv4_mac),
+    'symmetric_packet3': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/{}/UDP(dport=4, sport=2)'.format(swap_ipv4_mac),
+    'symmetric_packet4': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/{}/UDP(dport=2, sport=4)'.format(ipv4_mac),
+    'symmetric_packet5': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/{}/UDP(dport=2, sport=4)'.format(ipv4_mac),
+}
 
-mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric',
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_symmetric = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ipv4_symmetric',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end',
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 queues end / end',
     'test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=22, dport=23)/("X"*480)',
-            'action': {'save_hash': 'gtpogre-udp-dl'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['basic_packet'],
+            'action': {'save_hash': 'gtpogre-ipv4-nonfrag'},
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=23, dport=22)/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['symmetric_packet1'],
             'action': 'check_hash_same',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=22, dport=23)/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['symmetric_packet2'],
             'action': 'check_hash_same',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=23, dport=22)/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['symmetric_packet3'],
             'action': 'check_hash_same',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=22, dport=23)/("X"*480)',
-            'action': {'save_hash': 'gtpogre-udp-ul'},
-        },
-        {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=23, dport=22)/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['symmetric_packet4'],
             'action': 'check_hash_same',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=22, dport=23)/("X"*480)',
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['symmetric_packet5'],
             'action': 'check_hash_same',
         },
-        {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': 'check_hash_same',
+        {   # unmatch MAC_IPV4_GRE_IPV4_GTPU_EH_IPV6_UDP
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/{}/UDP(dport=2, sport=4)'.format(ipv6_match_ip2),
+            'action': 'check_no_hash',
+        },
+        {   # unmatch MAC_IPV4_GRE_IPV4_GTPU_EH_IPV4_TCP
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/{}/TCP(dport=2, sport=4)'.format(ipv4_mac),
+            'action': 'check_no_hash',
+        },
+        {   # unmatch MAC_IPV4_GRE_IPV4_GTPU_IPV4_UDP
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/{}/UDP(dport=2, sport=4)'.format(ipv4_mac),
+            'action': 'check_no_hash',
         },
     ],
-    'post-test': [
+    'post_test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['basic_packet'],
+            'action': 'check_no_hash',
+        }
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_pkt = {
+    'basic_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/{}/TCP(dport=2, sport=4)'.format(ipv4_mac),
+    'symmetric_packet1': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/{}/TCP(dport=2, sport=4)'.format(swap_ipv4_mac),
+    'symmetric_packet2': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/{}/TCP(dport=4, sport=2)'.format(ipv4_mac),
+    'symmetric_packet3': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/{}/TCP(dport=4, sport=2)'.format(swap_ipv4_mac),
+}
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_symmetric = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_symmetric',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_len 0 queues end / end',
+    'test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-udp-dl'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_pkt['basic_packet'],
+            'action': {'save_hash': 'gtpogre-ipv4-nonfrag'},
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=22, dport=23)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-udp-dl'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_pkt['symmetric_packet1'],
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-udp-dl'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_pkt['symmetric_packet2'],
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-udp-ul'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_pkt['symmetric_packet3'],
+            'action': 'check_hash_same',
+        },
+        {   # unmatch MAC_IPV4_GRE_IPV4_GTPU_UL_IPV6_TCP
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/{}/TCP(dport=2, sport=4)'.format(ipv6_match_ip2),
+            'action': 'check_no_hash',
+        },
+        {   # unmatch MAC_IPV4_GRE_IPV4_GTPU_UL_IPV4_UDP
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/{}/UDP(dport=2, sport=4)'.format(ipv4_mac),
+            'action': 'check_no_hash',
+        },
+        {  # unmatch MAC_IPV4_GRE_IPV4_GTPU_DL_IPV4_TCP
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/{}/TCP(dport=2, sport=4)'.format(ipv4_mac),
+            'action': 'check_no_hash',
         },
+        {  # unmatch MAC_IPV4_GRE_IPV4_GTPU_IPV4_TCP
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/{}/TCP(dport=2, sport=4)'.format(ipv4_mac),
+            'action': 'check_no_hash',
+        },
+    ],
+    'post_test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_pkt['basic_packet'],
+        'action': 'check_no_hash',
+        }
+    ]
+}
+
+mac_ipv4_gre_ipv4_gtpu_dl_ipv4_pkt = {
+    'basic_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/{}'.format(ipv4_mac),
+    'symmetric_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/{}'.format(swap_ipv4_mac)
+}
+
+mac_ipv4_gre_ipv4_gtpu_dl_ipv4_symmetric = {
+    'sub_casename': 'mac_ipv4_gre_ipv4_gtpu_dl_ipv4_symmetric',
+    'port_id': 0,
+    'rule': 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 0 / ipv4 / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / end',
+    'test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=22, dport=23)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-udp-ul'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_dl_ipv4_pkt['basic_packet'],
+            'action': {'save_hash': 'gtpogre-ipv4-nonfrag'},
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/UDP(sport=23, dport=22)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-udp-ul'},
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_dl_ipv4_pkt['symmetric_packet'],
+            'action': 'check_hash_same',
+        },
+        {   # unmatch MAC_IPV4_GRE_IPV4_GTPU_DL_IPV6
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/{}'.format(ipv6_match_ip2),
+            'action': 'check_no_hash',
+        },
+        {   # unmatch MMAC_IPV4_GRE_IPV4_GTPU_UL_IPV4
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/{}'.format(ipv4_mac),
+            'action': 'check_no_hash',
+        },
+        {   # unmatch MAC_IPV4_GRE_IPV4_GTPU_IPV4
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/{}'.format(ipv4_mac),
+            'action': 'check_no_hash',
         },
     ],
+    'post_test': [
+        {
+            'send_packet': mac_ipv4_gre_ipv4_gtpu_dl_ipv4_pkt['basic_packet'],
+            'action': 'check_no_hash',
+        }
+    ]
 }
-mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric)
-                                                         .replace('gtp_psc / ipv4', 'gtp_psc / ipv6')
-                                                         .replace('types ipv4', 'types ipv6')
-                                                         .replace('gtpu_eh_ipv4', 'gtpu_eh_ipv6')
-                                                         .replace('IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(dst="192.168.1.1", src="192.168.1.2"',)
-                                                         .replace('IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(src="192.168.1.1", dst="192.168.1.2"',)
-                                                         .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                                         .replace('IP(dst="192.168.0.2",src="192.168.0.1"', 'IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020",src="ABAB:910B:6666:3457:8295:3333:1800:2929"')
-                                                         )
 
-mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric = {
-    'sub_casename': 'mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric',
+# packet
+ipv4_packet = '/IP()/GRE()/IP()/'
+ipv6_ipv4_packet = '/IPv6()/GRE()/IP()/'
+ipv4_ipv6_packet = '/IP()/GRE()/IPv6()/'
+ipv6_ipv6_packet = '/IPv6()/GRE()/IPv6()/'
+
+mac_ipv6_gre_ipv4_gtpu_ipv4_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv4_symmetric).replace(ipv4_packet, ipv6_ipv4_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv4_name)
+                                             .replace(ipv4_rule, ipv6_ipv4_rule))
+
+mac_ipv6_gre_ipv4_gtpu_eh_ipv4_udp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_symmetric).replace(ipv4_packet, ipv6_ipv4_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv4_name)
+                                             .replace(ipv4_rule, ipv6_ipv4_rule))
+
+mac_ipv6_gre_ipv4_gtpu_ul_ipv4_tcp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_symmetric).replace(ipv4_packet, ipv6_ipv4_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv4_name)
+                                             .replace(ipv4_rule, ipv6_ipv4_rule))
+
+mac_ipv6_gre_ipv4_gtpu_dl_ipv4_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_dl_ipv4_symmetric).replace(ipv4_packet, ipv6_ipv4_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv4_name)
+                                             .replace(ipv4_rule, ipv6_ipv4_rule))
+
+# IPV6+IPV4+IPV4
+mac_ipv4_gre_ipv6_gtpu_ipv4_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv4_symmetric).replace(ipv4_packet, ipv4_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv4_ipv6_name)
+                                             .replace(ipv4_rule, ipv4_ipv6_rule))
+
+mac_ipv4_gre_ipv6_gtpu_eh_ipv4_udp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_symmetric).replace(ipv4_packet, ipv4_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv4_ipv6_name)
+                                             .replace(ipv4_rule, ipv4_ipv6_rule))
+
+mac_ipv4_gre_ipv6_gtpu_ul_ipv4_tcp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_symmetric).replace(ipv4_packet, ipv4_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv4_ipv6_name)
+                                             .replace(ipv4_rule, ipv4_ipv6_rule))
+
+mac_ipv4_gre_ipv6_gtpu_dl_ipv4_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_dl_ipv4_symmetric).replace(ipv4_packet, ipv4_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv4_ipv6_name)
+                                             .replace(ipv4_rule, ipv4_ipv6_rule))
+
+# IPV6+IPV6+IPV4
+mac_ipv6_gre_ipv6_gtpu_ipv4_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv4_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv6_gre_ipv6_gtpu_eh_ipv4_udp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv6_gre_ipv6_gtpu_ul_ipv4_tcp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv6_gre_ipv6_gtpu_dl_ipv4_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_dl_ipv4_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+# IPV4+IPV4+IPV6
+ipv4_mac = 'IP(src="1.1.2.6", dst="1.1.2.7")'
+swap_ipv4_mac = 'IP(src="1.1.2.7", dst="1.1.2.6")'
+
+ipv6_mac = 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")'
+swap_ipv6_mac = 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020")'
+
+mac_ipv4_gre_ipv4_gtpu_ipv6_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv4_symmetric).replace('ipv4_symmetric', 'ipv6_symmetric')
+                                             .replace(ipv4_mac, ipv6_mac)
+                                             .replace(swap_ipv4_mac, swap_ipv6_mac)
+                                             .replace(ipv6_match_ip2, ipv4_mac)
+                                             .replace('/ gtpu / ipv4 /', '/ gtpu / ipv6 /')
+                                             .replace('symmetric_toeplitz types ipv4', 'symmetric_toeplitz types ipv6'))
+
+mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_symmetric).replace('ipv4_symmetric', 'ipv6_symmetric')
+                                             .replace(ipv4_mac, ipv6_mac)
+                                             .replace(swap_ipv4_mac, swap_ipv6_mac)
+                                             .replace(ipv6_match_ip2, ipv4_mac)
+                                             .replace('/ gtp_psc / ipv4 / udp /', '/ gtp_psc / ipv6 / udp /')
+                                             .replace('symmetric_toeplitz types ipv4', 'symmetric_toeplitz types ipv6'))
+
+mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_symmetric).replace('ipv4_symmetric', 'ipv6_symmetric')
+                                             .replace(ipv4_mac, ipv6_mac)
+                                             .replace(swap_ipv4_mac, swap_ipv6_mac)
+                                             .replace(ipv6_match_ip2, ipv4_mac)
+                                             .replace('/ gtp_psc pdu_t is 1 / ipv4 / tcp /', '/ gtp_psc pdu_t is 1 / ipv6 / tcp /')
+                                             .replace('symmetric_toeplitz types ipv4', 'symmetric_toeplitz types ipv6'))
+
+mac_ipv4_gre_ipv4_gtpu_dl_ipv6_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_dl_ipv4_symmetric).replace('ipv4_symmetric', 'ipv6_symmetric')
+                                             .replace(ipv4_mac, ipv6_mac)
+                                             .replace(swap_ipv4_mac, swap_ipv6_mac)
+                                             .replace(ipv6_match_ip2, ipv4_mac)
+                                             .replace('/ gtp_psc pdu_t is 0 / ipv4 /', '/ gtp_psc pdu_t is 0 / ipv6 /')
+                                             .replace('symmetric_toeplitz types ipv4', 'symmetric_toeplitz types ipv6'))
+
+# IPV4+IPV6+IPV6
+mac_ipv4_gre_ipv6_gtpu_ipv6_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv6_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv4_gre_ipv6_gtpu_eh_ipv6_udp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv4_gre_ipv6_gtpu_ul_ipv6_tcp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv4_gre_ipv6_gtpu_dl_ipv6_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_dl_ipv6_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+# IPV6+IPV4+IPV6
+mac_ipv6_gre_ipv4_gtpu_ipv6_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv6_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv6_gre_ipv4_gtpu_eh_ipv6_udp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv6_gre_ipv4_gtpu_ul_ipv6_tcp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv6_gre_ipv4_gtpu_dl_ipv6_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_dl_ipv6_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+# IPV6+IPV6+IPV6
+mac_ipv6_gre_ipv6_gtpu_ipv6_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ipv6_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv6_gre_ipv6_gtpu_eh_ipv6_udp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv6_gre_ipv6_gtpu_ul_ipv6_tcp_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+mac_ipv6_gre_ipv6_gtpu_dl_ipv6_symmetric = eval(str(mac_ipv4_gre_ipv4_gtpu_dl_ipv6_symmetric).replace(ipv4_packet, ipv6_ipv6_packet)
+                                             .replace(ipv4_case_name, ipv6_ipv6_name)
+                                             .replace(ipv4_rule, ipv6_ipv6_rule))
+
+exclusive_with_eh_without_eh = {
+    'sub_casename': 'exclusive_eh_without_eh',
     'port_id': 0,
-    'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_len 0 queues end / end',
+    'rule': ['flow create 0 ingress pattern eth / ipv4 / gre / ipv6 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end',
+             'flow create 0 ingress pattern eth / ipv4 / gre / ipv6 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end'],
     'test': [
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/TCP(sport=22, dport=23)/("X"*480)',
-            'action': {'save_hash': 'gtpogre-tcp-dl'},
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()',
+            'action': 'save_hash',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/TCP(sport=23, dport=22)/("X"*480)',
-            'action': 'check_hash_same',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.14", dst="1.1.2.5")/UDP()',
+            'action': 'check_hash_different',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/TCP(sport=22, dport=23)/("X"*480)',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.15")/UDP()',
             'action': 'check_hash_same',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/TCP(sport=23, dport=22)/("X"*480)',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.15")/UDP()',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.14", dst="1.1.2.5")/UDP()',
             'action': 'check_hash_same',
+        }
+    ]
+}
+
+exclusive_with_l4_without_l4 = {
+    'sub_casename': 'exclusive_with_l4_without_l4',
+    'port_id': 0,
+    'rule': ['flow create 0 ingress pattern eth / ipv6 / gre / ipv6 / udp / gtpu / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end',
+             'flow create 0 ingress pattern eth / ipv6 / gre / ipv6 / udp / gtpu / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end'],
+    'test': [
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")',
+            'action': 'save_hash',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/TCP(sport=22, dport=23)/("X"*480)',
-            'action': {'save_hash': 'gtpogre-tcp-ul'},
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.14", dst="1.1.2.5")',
+            'action': 'check_hash_different',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/TCP(sport=23, dport=22)/("X"*480)',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.15")',
             'action': 'check_hash_same',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/TCP(sport=22, dport=23)/("X"*480)',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.15")/UDP()',
+            'action': 'check_hash_different',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.14", dst="1.1.2.5")/UDP()',
             'action': 'check_hash_same',
+        }
+    ],
+    'destroy_rule_1':[
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()',
+            'action': 'save_hash',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/TCP(sport=23, dport=22)/("X"*480)',
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.15")/UDP()',
             'action': 'check_hash_same',
         },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.14", dst="1.1.2.5")/UDP()',
+            'action': 'check_hash_different',
+        }
     ],
-    'post-test': [
+    'destroy_rule_0':[
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")',
+            'action': 'check_no_hash',
+        },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/TCP(sport=23, dport=22)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-tcp-dl'},
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.14", dst="1.1.2.5")',
+            'action': 'check_no_hash',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/TCP(sport=22, dport=23)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-tcp-dl'},
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP()/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.15")',
+            'action': 'check_no_hash',
+        },
+    ],
+}
+
+exclusive_eh_with_ul_without_eh_dl_ul = {
+    'sub_casename': 'exclusive_eh_with_ul_without_eh_dl_ul',
+    'port_id': 0,
+    'rule': ['flow create 0 ingress pattern eth / ipv4 / gre / ipv6 / udp / gtpu / gtp_psc / ipv4 / udp / end actions rss types ipv4-udp l3-src-only end key_len 0 queues end / end',
+             'flow create 0 ingress pattern eth / ipv4 / gre / ipv6 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end'],
+    'test': [
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()',
+            'action': 'save_hash',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/TCP(sport=23, dport=22)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-tcp-dl'},
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.14", dst="1.1.2.5")/UDP()',
+            'action': 'check_hash_different',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.1",src="192.168.0.2")/TCP(sport=23, dport=22)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-tcp-ul'},
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.15")/UDP()',
+            'action': 'check_hash_same',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/TCP(sport=22, dport=23)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-tcp-ul'},
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()',
+            'action': 'save_hash',
         },
         {
-            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(dst="192.168.0.2",src="192.168.0.1")/TCP(sport=23, dport=22)/("X"*480)',
-            'action': {'check_no_hash_or_different', 'gtpogre-tcp-ul'},
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.15")/UDP()',
+            'action': 'check_hash_different',
         },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.14", dst="1.1.2.5")/UDP()',
+            'action': 'check_hash_same',
+        }
     ],
+    'destroy_rule_1': [
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP()',
+            'action': 'save_hash',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.15")/UDP()',
+            'action': 'check_hash_same',
+        },
+        {
+            'send_packet': 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.14", dst="1.1.2.5")/UDP()',
+            'action': 'check_hash_different',
+        }
+    ]
 }
 
-mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric = eval(str(mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric)
-                                                         .replace('gtp_psc / ipv4', 'gtp_psc / ipv6')
-                                                         .replace('types ipv4', 'types ipv6')
-                                                         .replace('gtpu_eh_ipv4', 'gtpu_eh_ipv6')
-                                                         .replace('IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(dst="192.168.1.1", src="192.168.1.2"',)
-                                                         .replace('IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(src="192.168.1.1", dst="192.168.1.2"',)
-                                                         .replace('IP(dst="192.168.0.1",src="192.168.0.2"', 'IPv6(dst="ABAB:910B:6666:3457:8295:3333:1800:2929",src="CDCD:910A:2222:5498:8475:1111:3900:2020"')
-                                                         .replace('IP(dst="192.168.0.2",src="192.168.0.1"', 'IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020",src="ABAB:910B:6666:3457:8295:3333:1800:2929"')
-                                                         )
-
+exclusive = [exclusive_with_eh_without_eh, exclusive_with_l4_without_l4, exclusive_eh_with_ul_without_eh_dl_ul]
 
 class TestCVLAdvancedIAVFRSSGTPoGRE(TestCase):
 
@@ -2161,8 +4608,6 @@ class TestCVLAdvancedIAVFRSSGTPoGRE(TestCase):
 
         self.pkt = Packet()
         self.pmd_output = PmdOutput(self.dut)
-        self.launch_testpmd()
-        self.symmetric = False
         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))
@@ -2172,372 +4617,479 @@ class TestCVLAdvancedIAVFRSSGTPoGRE(TestCase):
         """
         Run before each test case.
         """
-        self.pmd_output.execute_cmd("start")
+        #if "toeplitz" in self.running_case:
+        #    self.skip_case(False, "not support the case")
+        #else:
+        self.launch_testpmd()
+
+    def tear_down(self):
+        # destroy all flow rule on port 0
+        #if "toeplitz" not in self.running_case:
+        self.pmd_output.execute_cmd("quit", "# ")
+
+    def tear_down_all(self):
+        self.destroy_vf()
 
     def destroy_vf(self):
-        self.dut.send_expect("quit", "# ", 60)
-        time.sleep(2)
-        self.dut.destroy_sriov_vfs_by_port(self.dut_ports[0])
+        self.dut.destroy_sriov_vfs_by_port(self.used_dut_port_0)
 
-    def launch_testpmd(self, symmetric=False):
-        if symmetric:
-            param = "--rxq=16 --txq=16"
-        else:
-            # if support add --disable-rss
-            param = "--rxq=16 --txq=16"
+    def launch_testpmd(self):
+        # if support add --disable-rss
+        param = "--rxq=16 --txq=16 --rxd=384 --txd=384 --disable-rss"
         self.pmd_output.start_testpmd(cores="1S/4C/1T", param=param,
-                                          eal_param=f"-w {self.vf0_pci}", socket=self.ports_socket)
-        '''
-        self.symmetric = symmetric
+                                          eal_param=f"-a {self.vf0_pci}", socket=self.ports_socket)
+        '''self.symmetric = symmetric
         if symmetric:
             # Need config rss in setup
-            self.pmd_output.execute_cmd("port config all rss all")
-        '''
+            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")
+        self.pmd_output.execute_cmd("start")
         res = self.pmd_output.wait_link_status_up('all', timeout=15)
         self.verify(res is True, 'there have port link is down')
 
-    def switch_testpmd(self, symmetric=True):
-        if symmetric != self.symmetric:
-            self.pmd_output.quit()
-            self.launch_testpmd(symmetric=symmetric)
-            self.pmd_output.execute_cmd("start")
-
-    def test_mac_ipv4_gtpogre_ipv4(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_toeplitz)
-
-    def test_mac_ipv4_gtpogre_ipv4_udp(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_udp_toeplitz)
-
-    def test_mac_ipv4_gtpogre_ipv4_tcp(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_tcp_toeplitz)
-
-    def test_mac_ipv4_gtpogre_ipv6(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_toeplitz)
-
-    def test_mac_ipv4_gtpogre_ipv6_udp(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_udp_toeplitz)
-
-    def test_mac_ipv4_gtpogre_ipv6_tcp(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_tcp_toeplitz)
-
-    def test_mac_ipv6_gtpogre_ipv4(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv4_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_ipv4_udp(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv4_udp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_ipv4_tcp(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv4_tcp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_ipv6(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv6_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_ipv6_udp(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv6_udp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_ipv6_tcp(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv6_tcp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_toeplitz)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4_udp(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_udp_toeplitz)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4_tcp(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_tcp_toeplitz)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_toeplitz)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6_udp(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_udp_toeplitz)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6_tcp(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_tcp_toeplitz)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv4_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4_udp(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv4_udp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4_tcp(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv4_tcp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv6_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6_udp(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv6_udp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6_tcp(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv6_tcp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv4_toeplitz)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4_udp_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4_tcp_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv4_tcp_toeplitz)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv6_toeplitz)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6_udp_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv6_udp_toeplitz)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6_tcp_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_without_ul_dl_ipv6_tcp_toeplitz)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4_udp_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4_tcp_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_tcp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_without_ul_dl_ipv6_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6_udp_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_without_ul_dl_ipv6_udp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6_tcp_without_ul_dl(self):
-        self.switch_testpmd(symmetric=False)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_without_ul_dl_ipv6_tcp_toeplitz)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv4_gtpogre_ipv4_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_symmetric)
-
-    def test_mac_ipv4_gtpogre_ipv4_udp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_udp_symmetric)
-
-    def test_mac_ipv4_gtpogre_ipv4_tcp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv4_tcp_symmetric)
-
-    def test_mac_ipv4_gtpogre_ipv6_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_symmetric)
-
-    def test_mac_ipv4_gtpogre_ipv6_udp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_udp_symmetric)
-
-    def test_mac_ipv4_gtpogre_ipv6_tcp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_ipv6_tcp_symmetric)
-
-    def test_mac_ipv6_gtpogre_ipv4_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv4_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_ipv4_udp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv4_udp_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_ipv4_tcp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv4_tcp_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_ipv6_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv6_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_ipv6_udp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv6_udp_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_ipv6_tcp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_ipv6_tcp_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_symmetric)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4_udp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_udp_symmetric)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4_tcp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_tcp_symmetric)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_symmetric)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6_udp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_udp_symmetric)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6_tcp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_tcp_symmetric)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv4_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4_udp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv4_tcp_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4_tcp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv4_tcp_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6_symmetric(self):
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv6_symmetric)
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6_udp_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv6_tcp_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6_tcp_symmetric(self):
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv6_tcp_symmetric)
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4_udp_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric)
-
-    def test_mac_ipv4_gtpogre_eh_ipv4_tcp_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_without_ul_dl_symmetric)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6_udp_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl_symmetric)
-
-    def test_mac_ipv4_gtpogre_eh_ipv6_tcp_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4_udp_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv4_tcp_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv6_without_ul_dl_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6_udp_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_mac_ipv6_gtpogre_eh_ipv6_tcp_without_ul_dl_symmetric(self):
-        self.switch_testpmd(symmetric=True)
-        ipv6_template = self.rssprocess.get_ipv6_template_by_ipv4_gtpogre(mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=ipv6_template)
-
-    def test_inner_l4_protocal_hash(self):
-        self.switch_testpmd(symmetric=True)
-        self.rssprocess.handle_rss_distribute_cases(cases_info=inner_l4_protocal_hash)
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ipv4_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ipv4_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_eh_ipv4_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ul_ipv4_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_dl_ipv4_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ipv4_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ipv4_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_eh_ipv4_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_eh_ipv4_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_eh_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ul_ipv4_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ul_ipv4_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ul_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_dl_ipv4_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_dl_ipv4_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_dl_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ipv4_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ipv4_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_eh_ipv4_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_eh_ipv4_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_eh_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ul_ipv4_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ul_ipv4_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ul_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_dl_ipv4_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_dl_ipv4_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_dl_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ipv4_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ipv4_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_eh_ipv4_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_eh_ipv4_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_eh_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ul_ipv4_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ul_ipv4_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ul_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv4_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_dl_ipv4_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv4_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_dl_ipv4_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv4_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_dl_ipv4_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ipv6_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ipv6_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_eh_ipv6_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ul_ipv6_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_dl_ipv6_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_dl_ipv6_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_dl_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ipv6_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ipv6_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_eh_ipv6_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_eh_ipv6_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_eh_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ul_ipv6_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ul_ipv6_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ul_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_dl_ipv6_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_dl_ipv6_udp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_dl_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ipv6_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ipv6_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_eh_ipv6_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_eh_ipv6_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_eh_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ul_ipv6_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ul_ipv6_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ul_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_dl_ipv6_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_dl_ipv6_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_dl_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ipv6_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ipv6_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_eh_ipv6_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_eh_ipv6_udp_toeplitz)
+
+    def mac_ipv6_gre_ipv6_gtpu_eh_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_eh_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ul_ipv6_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ul_ipv6_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ul_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv6_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_dl_ipv6_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv6_udp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_dl_ipv6_udp_toeplitz)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv6_tcp_toeplitz(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_dl_ipv6_tcp_toeplitz)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv4_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ipv4_symmetric)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_symmetric)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp_symmetric)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_dl_ipv4_symmetric)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv4_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ipv4_symmetric)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv4_udp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_eh_ipv4_udp_symmetric)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv4_tcp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ul_ipv4_tcp_symmetric)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv4_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_dl_ipv4_symmetric)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv4_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ipv4_symmetric)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_udp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_eh_ipv4_udp_symmetric)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_tcp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ul_ipv4_tcp_symmetric)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_dl_ipv4_symmetric)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv4_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ipv4_symmetric)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv4_udp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_eh_ipv4_udp_symmetric)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv4_tcp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ul_ipv4_tcp_symmetric)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv4_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_dl_ipv4_symmetric)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv6_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ipv6_symmetric)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp_symmetric)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp_symmetric)
+
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv4_gtpu_dl_ipv6_symmetric)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv6_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ipv6_symmetric)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_udp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_eh_ipv6_udp_symmetric)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_tcp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_ul_ipv6_tcp_symmetric)
+
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_gre_ipv6_gtpu_dl_ipv6_symmetric)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv6_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ipv6_symmetric)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv6_udp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_eh_ipv6_udp_symmetric)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv6_tcp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_ul_ipv6_tcp_symmetric)
+
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv6_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv4_gtpu_dl_ipv6_symmetric)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv6_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ipv6_symmetric)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv6_udp_symmetric(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_eh_ipv6_udp_symmetric)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv6_tcp_symmetric(self):
+        """
+
+        """
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_ul_ipv6_tcp_symmetric)
+
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv6_symmetric(self):
+        """
+        mac_ipv6_gre_ipv6_gtpu_dl_ipv6_symmetric
+        """
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_gre_ipv6_gtpu_dl_ipv6_symmetric)
+
+    def test_negative(self):
+        """
+        negative test case
+        """
+        rules = ['flow create 0 ingress pattern eth / ipv4 / gre / ipv6 / udp / gtpu / gtp_psc is 1 / ipv4 / udp / end actions rss types ipv4-udp gtpu end key_len 0 queues end / end',
+                 'flow create 0 ingress pattern eth / ipv4 / gre / ipv6 / udp / gtpu / gtp_psc is 1 / ipv4 / udp / end actions rss types ipv6-tcp end key_len 0 queues end / end',
+                 'flow create 0 ingress pattern eth / ipv6 / gre / ipv4 / udp / gtpu / gtp_psc is 1 / ipv4 / end actions rss types ipv4 l4-dst-only end key_len 0 queues end / end',
+                 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv6 / end actions rss types ipv6 l2-src-only end key_len 0 queues end / end',
+                 'flow create 0 ingress pattern eth / ipv4 / gre / ipv6 / udp / gtpu / gtp_psc is 1 / ipv6 / tcp / end actions rss func symmetric_toeplitz types l3-src-only end key_len 0 queues end / end',
+                 'flow create 0 ingress pattern eth / ipv6 / gre / ipv6 / udp / gtpu / gtp_psc is 1 / ipv4 / end actions rss func symmetric_toeplitz types l4-src-only end key_len 0 queues end / end']
+        for rule in rules:
+            rule_index = rules.index(rule)
+            out = self.pmd_output.execute_cmd(rule)
+            check_param = 'Failed to create flow' if rule_index == 3 else 'Bad arguments'
+            print("check_param===%s" % check_param)
+            self.verify(check_param in out, 'create rule successfully, not as expected')
+
+    def check_exclusive_cases(self, case_list):
+
+        for case in case_list:
+            self.logger.info('===================Test sub case: {}================'.format(case['sub_casename']))
+            rule_ids = self.rssprocess.create_rule(rule=case['rule'], check_stats=True)
+            self.rssprocess.check_rule(rule_list=rule_ids)
+            self.rssprocess.handle_tests(case['test'])
+            if 'destroy_rule_1' in case:
+                self.rssprocess.destroy_rule(rule_id=1)
+                self.rssprocess.handle_tests(case['destroy_rule_1'])
+            if case['sub_casename'] == 'exclusive_with_l4_without_l4':
+                self.pmd_output.execute_cmd('flow flush 0')
+                rule_ids = self.rssprocess.create_rule(rule=case['rule'], check_stats=True)
+                self.rssprocess.check_rule(rule_list=rule_ids)
+                if 'destroy_rule_0' in case:
+                    self.rssprocess.destroy_rule(rule_id=0)
+                    self.rssprocess.handle_tests(case['destroy_rule_0'])
+            self.pmd_output.execute_cmd('flow flush 0')
+
+    def test_exclusive(self):
+        """
+        exclusive test case
+        """
+        rule1 = 'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions queue index 13 / mark id 13 / end'
+        rule2 = 'flow create 0 ingress pattern eth / ipv4 / gre / ipv6 / udp / gtpu / gtp_psc / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions queue index 3 / mark id 3 / end'
+        self.check_exclusive_cases(exclusive)
+        rule_ids = self.rssprocess.create_rule(rule=rule1, check_stats=True)
+        self.rssprocess.check_rule(rule_list=rule_ids)
+        out = self.pmd_output.execute_cmd(rule2)
+        self.verify('Failed to create flow' in out, 'create rule successfully, not as expected')
+        self.pmd_output.execute_cmd('flow flush 0')
+        rule_ids = self.rssprocess.create_rule(rule=rule2, check_stats=True)
+        self.rssprocess.check_rule(rule_list=rule_ids)
+        out = self.pmd_output.execute_cmd(rule1)
+        self.verify('Failed to create flow' in out, 'create rule successfully, not as expected')
+        self.pmd_output.execute_cmd('flow flush 0')
 
-    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.destroy_vf()
-        self.dut.kill_all()
-- 
2.17.1


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

end of thread, other threads:[~2021-09-09  7:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-26  6:57 [dts] [PATCH v1] tests: add test cases for iavf rss support gtpogre Hailin Xu
2021-08-26  7:47 ` Xu, HailinX
2021-09-06  8:58   ` Fu, Qi
2021-09-09  7:42   ` Tu, Lijuan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).