test suite reviews and discussions
 help / color / mirror / Atom feed
From: qifu <qi.fu@intel.com>
To: dts@dpdk.org
Cc: qifu <qi.fu@intel.com>
Subject: [dts] [PATCH V4]tests: add test suite for cvl iavf fdir support gtpogre
Date: Thu, 16 Sep 2021 10:57:17 -0400
Message-ID: <20210916145717.1550917-1-qi.fu@intel.com> (raw)

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 suite for GTPoGRE FDIR tests.

Signed-off-by: qifu <qi.fu@intel.com>
---
 tests/TestSuite_iavf_fdir_gtpogre.py | 2266 ++++++++++++++++++++++++++
 1 file changed, 2266 insertions(+)
 create mode 100644 tests/TestSuite_iavf_fdir_gtpogre.py

diff --git a/tests/TestSuite_iavf_fdir_gtpogre.py b/tests/TestSuite_iavf_fdir_gtpogre.py
new file mode 100644
index 00000000..9ee8ad5c
--- /dev/null
+++ b/tests/TestSuite_iavf_fdir_gtpogre.py
@@ -0,0 +1,2266 @@
+# BSD LICENSE\r
+#\r
+# Copyright(c) 2021 Intel Corporation. All rights reserved.\r
+# All rights reserved.\r
+#\r
+# Redistribution and use in source and binary forms, with or without\r
+# modification, are permitted provided that the following conditions\r
+# are met:\r
+#\r
+#   * Redistributions of source code must retain the above copyright\r
+#     notice, this list of conditions and the following disclaimer.\r
+#   * Redistributions in binary form must reproduce the above copyright\r
+#     notice, this list of conditions and the following disclaimer in\r
+#     the documentation and/or other materials provided with the\r
+#     distribution.\r
+#   * Neither the name of Intel Corporation nor the names of its\r
+#     contributors may be used to endorse or promote products derived\r
+#     from this software without specific prior written permission.\r
+#\r
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+from packet import Packet\r
+from pmd_output import PmdOutput\r
+from test_case import TestCase\r
+import re\r
+from utils import GREEN, RED\r
+import time\r
+from scapy.all import *\r
+import rte_flow_common as rfc\r
+\r
+LAUNCH_QUEUE = 16\r
+\r
+mac_ipv4_gre_ipv4_gtpu_ipv4_pkt={\r
+    "matched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")'],\r
+    "unmatched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.14", dst="1.1.2.5")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.15")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IPv6()']\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ipv4_queue_index = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ipv4_queue_index",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions queue index 3 / mark id 13 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": 3, "mark_id": 13}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ipv4_rss_queues = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ipv4_rss_queues",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions rss queues 4 5 end / mark id 23 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": [4, 5], "mark_id": 23}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ipv4_passthru = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ipv4_passthru",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions passthru / mark id 33 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 33}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ipv4_drop = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ipv4_drop",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions drop / end",\r
+\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "drop": True}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ipv4_mark_rss = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ipv4_mark_rss",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions mark / rss / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 0, "rss": True}\r
+}\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ipv4 = [\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ipv4_queue_index,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ipv4_rss_queues,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ipv4_passthru,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ipv4_drop,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ipv4_mark_rss,\r
+    ]\r
+\r
+mac_ipv4_gre_ipv4_gtpu_ipv4_udp_pkt={\r
+    "matched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)'],\r
+    "unmatched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.14", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.15")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=14, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=24)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")/TCP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IPv6()/UDP(sport=13, dport=23)']\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_queue_index = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_queue_index",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / udp src is 13 dst is 23 / end actions queue index 3 / mark id 13 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": 3, "mark_id": 13}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_rss_queues = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_rss_queues",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / udp src is 13 dst is 23 / end actions rss queues 4 5 end / mark id 23 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": [4, 5], "mark_id": 23}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_passthru = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_passthru",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / udp src is 13 dst is 23 / end actions passthru / mark id 33 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 33}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_drop = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_drop",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / udp src is 13 dst is 23 / end actions drop / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "drop": True}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_mark_rss = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_mark_rss",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / udp src is 13 dst is 23 / end actions mark / rss / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 0, "rss": True}\r
+}\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ipv4_udp = [\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_queue_index,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_rss_queues,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_passthru,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_drop,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ipv4_udp_mark_rss,\r
+    ]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ipv4_tcp = [eval(str(element).replace('UDP(sport', 'UDP1(sport')\r
+                                                        .replace('TCP(sport', 'TCP1(sport')\r
+                                                        .replace('UDP1(sport', 'TCP(sport')\r
+                                                        .replace('TCP1(sport', 'UDP(sport')\r
+                                                        .replace('_udp_', '_tcp_')\r
+                                                        .replace('udp src', 'tcp src')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv4_udp]\r
+\r
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_pkt={\r
+    "matched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")'],\r
+    "unmatched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.14", dst="1.1.2.5")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.15")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.14", dst="1.1.2.5")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.15")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.14", dst="1.1.2.5")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.15")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6()',\r
+                 ]\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_queue_index = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_queue_index",\r
+    "rule": "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 3 / mark id 13 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": 3, "mark_id": 13}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_rss_queues = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_rss_queues",\r
+    "rule": "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 rss queues 4 5 end / mark id 23 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": [4, 5], "mark_id": 23}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_passthru = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_passthru",\r
+    "rule": "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 passthru / mark id 33 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 33}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_drop = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_drop",\r
+    "rule": "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 drop / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "drop": True}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_mark_rss = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_mark_rss",\r
+    "rule": "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 mark / rss / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 0, "rss": True}\r
+}\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4 = [\r
+    tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_queue_index,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_rss_queues,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_passthru,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_drop,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_mark_rss,\r
+    ]\r
+\r
+mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt={\r
+    "matched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)'],\r
+    "unmatched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.14", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.15")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=14, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=24)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.5")/TCP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer()/IPv6()/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.14", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.15")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=14, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=24)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/TCP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IPv6()/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)']\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_queue_index = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_queue_index",\r
+    "rule": "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 / udp src is 13 dst is 23 / end actions queue index 3 / mark id 13 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": 3, "mark_id": 13}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_rss_queues = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_rss_queues",\r
+    "rule": "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 / udp src is 13 dst is 23 / end actions rss queues 4 5 end / mark id 23 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": [4, 5], "mark_id": 23}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_passthru = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_passthru",\r
+    "rule": "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 / udp src is 13 dst is 23 / end actions passthru / mark id 33 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 33}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_drop = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_drop",\r
+    "rule": "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 / udp src is 13 dst is 23 / end actions drop / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "drop": True}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_mark_rss = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_mark_rss",\r
+    "rule": "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 / udp src is 13 dst is 23 / end actions mark / rss / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 0, "rss": True}\r
+}\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp = [\r
+    tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_queue_index,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_rss_queues,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_passthru,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_drop,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp_mark_rss,\r
+    ]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp = [eval(str(element).replace('UDP(sport', 'UDP1(sport')\r
+                                                        .replace('TCP(sport', 'TCP1(sport')\r
+                                                        .replace('UDP1(sport', 'TCP(sport')\r
+                                                        .replace('TCP1(sport', 'UDP(sport')\r
+                                                        .replace('_udp_', '_tcp_')\r
+                                                        .replace('udp src', 'tcp src')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp]\r
+\r
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_pkt={\r
+    "matched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")'],\r
+    "unmatched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.14", dst="1.1.2.5")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.15")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")'\r
+                 ]\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_queue_index = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_queue_index",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions queue index 3 / mark id 13 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": 3, "mark_id": 13}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_rss_queues = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_rss_queues",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions rss queues 4 5 end / mark id 23 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": [4, 5], "mark_id": 23}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_passthru = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_passthru",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions passthru / mark id 33 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 33}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_drop = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_drop",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions drop / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "drop": True}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_mark_rss = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_mark_rss",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions mark / rss / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 0, "rss": True}\r
+}\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4 = [\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_queue_index,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_rss_queues,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_passthru,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_drop,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_mark_rss,\r
+    ]\r
+\r
+mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_pkt={\r
+    "matched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+               'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)'],\r
+    "unmatched":['Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.14", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.15")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=14, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=24)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/TCP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IPv6()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IPv6()/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP()/GRE()/IP()/UDP(dport=2152)/GTP_U_Header()/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)',\r
+                ]\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_queue_index = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_queue_index",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / udp src is 13 dst is 23 / end actions queue index 3 / mark id 13 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": 3, "mark_id": 13}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_rss_queues = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_rss_queues",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / udp src is 13 dst is 23 / end actions rss queues 4 5 end / mark id 23 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": [4, 5], "mark_id": 23}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_passthru = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_passthru",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / udp src is 13 dst is 23 / end actions passthru / mark id 33 / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 33}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_drop = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_drop",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / udp src is 13 dst is 23 / end actions drop / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "drop": True}\r
+}\r
+\r
+tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_mark_rss = {\r
+    "name": "tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_mark_rss",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / udp src is 13 dst is 23 / end actions mark / rss / end",\r
+    "scapy_str": {"matched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_pkt['matched'],\r
+                  "unmatched": mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 0, "rss": True}\r
+}\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp = [\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_queue_index,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_rss_queues,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_passthru,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_drop,\r
+    tv_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp_mark_rss,\r
+    ]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp = [eval(str(element).replace('UDP(sport', 'UDP1(sport')\r
+                                                        .replace('TCP(sport', 'TCP1(sport')\r
+                                                        .replace('UDP1(sport', 'TCP(sport')\r
+                                                        .replace('TCP1(sport', 'UDP(sport')\r
+                                                        .replace('_udp_', '_tcp_')\r
+                                                        .replace('udp src', 'tcp src')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4 = [eval(str(element).replace('_ul_', '_dl_')\r
+                                                        .replace('type=1', 'type=11')\r
+                                                        .replace('type=0', 'type=10')\r
+                                                        .replace('type=11', 'type=0')\r
+                                                        .replace('type=10', 'type=1')\r
+                                                        .replace('pdu_t is 1', 'pdu_t is 0')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp = [eval(str(element).replace('_ul_', '_dl_')\r
+                                                        .replace('type=1', 'type=11')\r
+                                                        .replace('type=0', 'type=10')\r
+                                                        .replace('type=11', 'type=0')\r
+                                                        .replace('type=10', 'type=1')\r
+                                                        .replace('pdu_t is 1', 'pdu_t is 0')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp = [eval(str(element).replace('_ul_', '_dl_')\r
+                                                        .replace('type=1', 'type=11')\r
+                                                        .replace('type=0', 'type=10')\r
+                                                        .replace('type=11', 'type=0')\r
+                                                        .replace('type=10', 'type=1')\r
+                                                        .replace('pdu_t is 1', 'pdu_t is 0')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ipv4 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv4]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ipv4_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv4_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ipv4_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv4_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv4 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv4_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv4_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv4 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv4_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv4_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv4 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv4_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv4_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ipv4 = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv4]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ipv4_udp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv4_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ipv4_tcp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv4_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv4 = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_udp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_tcp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv4 = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_udp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_tcp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv4 = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_udp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_tcp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ipv6 = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv4]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ipv6_udp = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv4_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ipv6_tcp = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv4_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6 = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6 = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6 = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_udp = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_tcp = [eval(str(element).replace('gtpu_ipv4', 'gtpu_ipv6')\r
+                                                    .replace('eh_ipv4', 'eh_ipv6')\r
+                                                    .replace('ul_ipv4', 'ul_ipv6')\r
+                                                    .replace('dl_ipv4', 'dl_ipv6')\r
+                                                    .replace('GTP_U_Header()/IPv6', 'GTP_U_Header()/IP')\r
+                                                    .replace('GTPPDUSessionContainer()/IPv6', 'GTPPDUSessionContainer()/IP')\r
+                                                    .replace('QFI=0x34)/IPv6', 'QFI=0x34)/IP')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                    .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                    .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ipv4 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ipv4]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ipv4_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ipv4_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ipv4_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ipv4_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv4 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv4]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv4_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv4_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv4 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv4]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv4_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv4_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv4 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv4]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv4_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv4_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ipv6 = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv6]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ipv6_udp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv6_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ipv6_tcp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv6_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv6 = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_udp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_tcp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv6 = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_udp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_tcp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv6 = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_udp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_udp]\r
+\r
+tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_tcp = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ipv6 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv6]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ipv6_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv6_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ipv6_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ipv6_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv6 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv6_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv6_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv6 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv6_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv6_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv6 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv6_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv6_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ipv6 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ipv6]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ipv6_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ipv6_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ipv6_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ipv6_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv6 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv6]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv6_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv6_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv6 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv6]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv6_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv6_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_tcp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv6 = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv6]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv6_udp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_udp]\r
+\r
+tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv6_tcp = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP()/GRE', 'IP1()/GRE')\r
+                                                        .replace('IPv6()/GRE', 'IPv66()/GRE')\r
+                                                        .replace('IP1()/GRE', 'IPv6()/GRE')\r
+                                                        .replace('IPv66()/GRE', 'IP()/GRE')\r
+                                                        .replace('ipv4 / gre', 'ipv6 / gre')\r
+                                         )\r
+                                       for element in tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_tcp]\r
+\r
+outer_mac_ipv4_gre_ipv4_gtpu_eh_pkt={\r
+    "matched":['Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IPv6()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IPv6()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IP()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IP()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IPv6()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IPv6()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IP()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IP()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IPv6()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IPv6()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IPv6()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IPv6()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IP()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IP()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IPv6()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IPv6()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IP()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IP()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IPv6()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IPv6()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()/TCP()'],\r
+    "unmatched":['Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.14", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.15")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x11)/GTPPDUSessionContainer(QFI=0x3)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x13)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.14", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IPv6()/UDP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.15")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IPv6()/UDP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x11)/GTPPDUSessionContainer(QFI=0x3)/IPv6()/TCP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x13)/IPv6()/TCP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.14", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.15")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x11)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x13)/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.14", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.15")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x11)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x13)/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/IP()']\r
+}\r
+\r
+tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_queue_index = {\r
+    "name": "tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_queue_index",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv4 / udp / gtpu teid is 0x12 / gtp_psc qfi is 0x3 / end actions queue index 3 / mark id 13 / end",\r
+    "scapy_str": {"matched": outer_mac_ipv4_gre_ipv4_gtpu_eh_pkt['matched'],\r
+                  "unmatched": outer_mac_ipv4_gre_ipv4_gtpu_eh_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": 3, "mark_id": 13}\r
+}\r
+\r
+tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_rss_queues = {\r
+    "name": "tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_rss_queues",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv4 / udp / gtpu teid is 0x12 / gtp_psc qfi is 0x3 / end actions rss queues 4 5 end / mark id 23 / end",\r
+    "scapy_str": {"matched": outer_mac_ipv4_gre_ipv4_gtpu_eh_pkt['matched'],\r
+                  "unmatched": outer_mac_ipv4_gre_ipv4_gtpu_eh_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": [4, 5], "mark_id": 23}\r
+}\r
+\r
+tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_passthru = {\r
+    "name": "tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_passthru",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv4 / udp / gtpu teid is 0x12 / gtp_psc qfi is 0x3 / end actions passthru / mark id 33 / end",\r
+    "scapy_str": {"matched": outer_mac_ipv4_gre_ipv4_gtpu_eh_pkt['matched'],\r
+                  "unmatched": outer_mac_ipv4_gre_ipv4_gtpu_eh_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 33}\r
+}\r
+\r
+tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_drop = {\r
+    "name": "tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_drop",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv4 / udp / gtpu teid is 0x12 / gtp_psc qfi is 0x3 / end actions drop / end",\r
+    "scapy_str": {"matched": outer_mac_ipv4_gre_ipv4_gtpu_eh_pkt['matched'],\r
+                  "unmatched": outer_mac_ipv4_gre_ipv4_gtpu_eh_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "drop": True}\r
+}\r
+\r
+tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_mark_rss = {\r
+    "name": "tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_mark_rss",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv4 / udp / gtpu teid is 0x12 / gtp_psc qfi is 0x3 / end actions mark / rss / end",\r
+    "scapy_str": {"matched": outer_mac_ipv4_gre_ipv4_gtpu_eh_pkt['matched'],\r
+                  "unmatched": outer_mac_ipv4_gre_ipv4_gtpu_eh_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 0, "rss": True}\r
+}\r
+\r
+tvs_outer_mac_ipv4_gre_ipv4_gtpu_eh = [\r
+    tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_queue_index,\r
+    tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_rss_queues,\r
+    tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_passthru,\r
+    tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_drop,\r
+    tv_outer_mac_ipv4_gre_ipv4_gtpu_eh_mark_rss,\r
+    ]\r
+\r
+\r
+outer_mac_ipv4_gre_ipv4_gtpu_ul_pkt={\r
+    "matched":['Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()/UDP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()/TCP()',\r
+               'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IPv6()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()/TCP()',],\r
+    "unmatched":['Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.14", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.15")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x11)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x13)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.14", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.15")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x11)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x13)/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IPv6()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.14", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()/UDP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.15")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IP()/UDP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x11)/GTPPDUSessionContainer(type=1, P=1, QFI=0x3)/IPv6()/TCP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=1, P=1, QFI=0x13)/IP()/TCP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(type=0, P=1, QFI=0x3)/IP()/TCP()',\r
+                 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.4", dst="1.1.2.5")/GRE()/IP()/UDP(dport=2152)/GTP_U_Header(teid=0x12)/IP()']\r
+}\r
+\r
+tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_queue_index = {\r
+    "name": "tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_queue_index",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv4 / udp / gtpu teid is 0x12 / gtp_psc pdu_t is 1 qfi is 0x3 / end actions queue index 3 / mark id 13 / end",\r
+    "scapy_str": {"matched": outer_mac_ipv4_gre_ipv4_gtpu_ul_pkt['matched'],\r
+                  "unmatched": outer_mac_ipv4_gre_ipv4_gtpu_ul_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": 3, "mark_id": 13}\r
+}\r
+\r
+tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_rss_queues = {\r
+    "name": "tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_rss_queues",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv4 / udp / gtpu teid is 0x12 / gtp_psc pdu_t is 1 qfi is 0x3 / end actions rss queues 4 5 end / mark id 23 / end",\r
+    "scapy_str": {"matched": outer_mac_ipv4_gre_ipv4_gtpu_ul_pkt['matched'],\r
+                  "unmatched": outer_mac_ipv4_gre_ipv4_gtpu_ul_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "queue": [4, 5], "mark_id": 23}\r
+}\r
+\r
+tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_passthru = {\r
+    "name": "tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_passthru",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv4 / udp / gtpu teid is 0x12 / gtp_psc pdu_t is 1 qfi is 0x3 / end actions passthru / mark id 33 / end",\r
+    "scapy_str": {"matched": outer_mac_ipv4_gre_ipv4_gtpu_ul_pkt['matched'],\r
+                  "unmatched": outer_mac_ipv4_gre_ipv4_gtpu_ul_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 33}\r
+}\r
+\r
+tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_drop = {\r
+    "name": "tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_drop",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv4 / udp / gtpu teid is 0x12 / gtp_psc pdu_t is 1 qfi is 0x3 / end actions drop / end",\r
+    "scapy_str": {"matched": outer_mac_ipv4_gre_ipv4_gtpu_ul_pkt['matched'],\r
+                  "unmatched": outer_mac_ipv4_gre_ipv4_gtpu_ul_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "drop": True}\r
+}\r
+\r
+tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_mark_rss = {\r
+    "name": "tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_mark_rss",\r
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv4 / udp / gtpu teid is 0x12 / gtp_psc pdu_t is 1 qfi is 0x3 / end actions mark / rss / end",\r
+    "scapy_str": {"matched": outer_mac_ipv4_gre_ipv4_gtpu_ul_pkt['matched'],\r
+                  "unmatched": outer_mac_ipv4_gre_ipv4_gtpu_ul_pkt['unmatched']\r
+                  },\r
+    "check_param": {"port_id": 0, "rxq": LAUNCH_QUEUE, "mark_id": 0, "rss": True}\r
+}\r
+\r
+tvs_outer_mac_ipv4_gre_ipv4_gtpu_ul = [\r
+    tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_queue_index,\r
+    tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_rss_queues,\r
+    tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_passthru,\r
+    tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_drop,\r
+    tv_outer_mac_ipv4_gre_ipv4_gtpu_ul_mark_rss,\r
+    ]\r
+\r
+tvs_outer_mac_ipv4_gre_ipv4_gtpu_dl = [eval(str(element).replace('_ul', '_dl')\r
+                                                        .replace('type=1', 'type=11')\r
+                                                        .replace('type=0', 'type=10')\r
+                                                        .replace('type=11', 'type=0')\r
+                                                        .replace('type=10', 'type=1')\r
+                                                        .replace('pdu_t is 1', 'pdu_t is 0')\r
+                                         )\r
+                                       for element in tvs_outer_mac_ipv4_gre_ipv4_gtpu_ul]\r
+\r
+tvs_outer_mac_ipv4_gre_ipv6_gtpu_eh = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_outer_mac_ipv4_gre_ipv4_gtpu_eh]\r
+\r
+tvs_outer_mac_ipv4_gre_ipv6_gtpu_ul = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_outer_mac_ipv4_gre_ipv4_gtpu_ul]\r
+\r
+tvs_outer_mac_ipv4_gre_ipv6_gtpu_dl = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_outer_mac_ipv4_gre_ipv4_gtpu_dl]\r
+\r
+tvs_outer_mac_ipv6_gre_ipv4_gtpu_eh = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                        .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                        .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                        .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_outer_mac_ipv4_gre_ipv4_gtpu_eh]\r
+\r
+tvs_outer_mac_ipv6_gre_ipv4_gtpu_ul = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                        .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                        .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                        .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_outer_mac_ipv4_gre_ipv4_gtpu_ul]\r
+\r
+tvs_outer_mac_ipv6_gre_ipv4_gtpu_dl = [eval(str(element).replace('mac_ipv4', 'mac_ipv6')\r
+                                                        .replace('IP(src="1.1.2.4", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                        .replace('IP(src="1.1.2.4", dst="1.1.2.15")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",dst="CDCD:910A:2222:5498:8475:1111:3900:2021")')\r
+                                                        .replace('IP(src="1.1.2.14", dst="1.1.2.5")', 'IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1516",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")')\r
+                                                        .replace('ipv4 src is 1.1.2.4 dst is 1.1.2.5', 'ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020')\r
+                                         )\r
+                                       for element in tvs_outer_mac_ipv4_gre_ipv4_gtpu_dl]\r
+\r
+tvs_outer_mac_ipv6_gre_ipv6_gtpu_eh = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_outer_mac_ipv6_gre_ipv4_gtpu_eh]\r
+\r
+tvs_outer_mac_ipv6_gre_ipv6_gtpu_ul = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_outer_mac_ipv6_gre_ipv4_gtpu_ul]\r
+\r
+tvs_outer_mac_ipv6_gre_ipv6_gtpu_dl = [eval(str(element).replace('gre_ipv4', 'gre_ipv6')\r
+                                                        .replace('GRE()/IP()', 'GRE()/IP2()')\r
+                                                        .replace('GRE()/IPv6()', 'GRE()/IPv62()')\r
+                                                        .replace('GRE()/IP2()', 'GRE()/IPv6()')\r
+                                                        .replace('GRE()/IPv62()', 'GRE()/IP()')\r
+                                                        .replace('gre / ipv4', 'gre / ipv6')\r
+                                         )\r
+                                       for element in tvs_outer_mac_ipv6_gre_ipv4_gtpu_dl]\r
+\r
+class TestCvlIavfGTPoGREFDIR(TestCase):\r
+    def set_up_all(self):\r
+        self.ports = self.dut.get_ports(self.nic)\r
+\r
+        # init pkt\r
+        self.pkt = Packet()\r
+        # set default app parameter\r
+        self.pmd_out = PmdOutput(self.dut)\r
+        self.tester_mac = self.tester.get_mac(0)\r
+        self.tester_port0 = self.tester.get_local_port(self.ports[0])\r
+        self.tester_iface0 = self.tester.get_interface(self.tester_port0)\r
+\r
+        self.tester.send_expect('ifconfig {} up'.format(self.tester_iface0), '# ')\r
+        self.param = '--rxq={} --txq={} --disable-rss --txd=384 --rxd=384'.format(LAUNCH_QUEUE, LAUNCH_QUEUE)\r
+        self.param_fdir = '--rxq={} --txq={}'.format(LAUNCH_QUEUE, LAUNCH_QUEUE)\r
+        self.vf_flag = False\r
+        self.cores = self.dut.get_core_list("1S/4C/1T")\r
+        self.setup_1pf_vfs_env()\r
+\r
+        self.ports_pci = [self.dut.ports_info[self.ports[0]]['pci']]\r
+        self.rxq = 16\r
+        self.fdirprocess = rfc.FdirProcessing(self, self.pmd_out, [self.tester_iface0], LAUNCH_QUEUE, ipfrag_flag=False)\r
+        self.rssprocess = rfc.RssProcessing(self, self.pmd_out, [self.tester_iface0], self.rxq)\r
+\r
+    def set_up(self):\r
+        pass\r
+\r
+    def setup_1pf_vfs_env(self):\r
+        """\r
+        create vf and set vf mac\r
+        """\r
+        self.vf_flag = True\r
+        self.dut.bind_interfaces_linux('ice')\r
+        self.pf_interface = self.dut.ports_info[0]['intf']\r
+        self.dut.send_expect("ifconfig {} up".format(self.pf_interface), "# ")\r
+        self.dut.generate_sriov_vfs_by_port(self.ports[0], 1, driver=self.kdriver)\r
+        self.dut.send_expect('ip link set {} vf 0 mac 00:11:22:33:44:55'.format(self.pf_interface), '# ')\r
+        self.vf_port = self.dut.ports_info[0]['vfs_port']\r
+        self.verify(len(self.vf_port) != 0, "VF create failed")\r
+        self.vf_driver = self.get_suite_cfg()['vf_driver']\r
+        if self.vf_driver is None:\r
+            self.vf_assign_method = 'vfio-pci'\r
+        self.vf_port[0].bind_driver(self.vf_driver)\r
+\r
+        self.vf_ports_pci = [self.vf_port[0].pci]\r
+\r
+    def launch_testpmd(self, param_fdir=False):\r
+        """\r
+        start testpmd with fdir or rss param, and pf or vf\r
+\r
+        :param param_fdir: True: Fdir param/False: rss param\r
+        """\r
+        if param_fdir == True:\r
+            self.pmd_out.start_testpmd(cores=self.cores, ports=self.vf_ports_pci, param=self.param_fdir)\r
+        else:\r
+            self.pmd_out.start_testpmd(cores=self.cores, ports=self.vf_ports_pci, param=self.param)\r
+        self.dut.send_expect("set fwd rxonly", "testpmd> ")\r
+        self.dut.send_expect("set verbose 1", "testpmd> ")\r
+        self.dut.send_expect("start", "testpmd> ")\r
+\r
+    def destroy_testpmd_and_vf(self):\r
+        """\r
+        quit testpmd\r
+        if vf testpmd, destroy the vfs and set vf_flag = false\r
+        """\r
+        for port_id in self.ports:\r
+            self.dut.destroy_sriov_vfs_by_port(port_id)\r
+\r
+    def tear_down(self):\r
+        self.dut.send_expect("quit", "# ")\r
+        self.dut.kill_all()\r
+\r
+    def tear_down_all(self):\r
+        self.destroy_testpmd_and_vf()\r
+        self.dut.kill_all()\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ipv4 )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ipv4_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ipv4_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4 )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4 )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv4_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4 )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv4_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ipv4 )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ipv4_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ipv4_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv4 )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv4_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv4_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv4 )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv4_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv4_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv4 )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv4_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv4_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ipv4 )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ipv4_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ipv4_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv4 )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv4_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv4 )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv4_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv4 )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv4_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ipv6 )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ipv6_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ipv6_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6 )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6 )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_ul_ipv6_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6 )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv4_gtpu_dl_ipv6_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ipv4 )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ipv4_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ipv4_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv4 )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv4_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv4_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv4 )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv4_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv4_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv4 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv4 )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv4_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv4_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv4_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv4_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ipv6 )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ipv6_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ipv6_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv6 )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_eh_ipv6_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv6 )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_ul_ipv6_tcp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv6 )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_udp )\r
+\r
+    def test_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv4_gre_ipv6_gtpu_dl_ipv6_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ipv6 )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ipv6_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ipv6_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv6 )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv6_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_eh_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_eh_ipv6_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv6 )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv6_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_ul_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_ul_ipv6_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv6 )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv6_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv4_gtpu_dl_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv4_gtpu_dl_ipv6_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ipv6 )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ipv6_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ipv6_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv6 )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv6_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_eh_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_eh_ipv6_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv6 )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv6_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_ul_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_ul_ipv6_tcp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv6 (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv6 )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv6_udp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv6_udp )\r
+\r
+    def test_mac_ipv6_gre_ipv6_gtpu_dl_ipv6_tcp (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_mac_ipv6_gre_ipv6_gtpu_dl_ipv6_tcp )\r
+\r
+    def test_outer_mac_ipv4_gre_ipv4_gtpu_eh (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv4_gre_ipv4_gtpu_eh )\r
+\r
+    def test_outer_mac_ipv4_gre_ipv4_gtpu_ul (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv4_gre_ipv4_gtpu_ul )\r
+\r
+    def test_outer_mac_ipv4_gre_ipv4_gtpu_dl (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv4_gre_ipv4_gtpu_dl )\r
+\r
+    def test_outer_mac_ipv4_gre_ipv6_gtpu_eh (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv4_gre_ipv6_gtpu_eh )\r
+\r
+    def test_outer_mac_ipv4_gre_ipv6_gtpu_ul (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv4_gre_ipv6_gtpu_ul )\r
+\r
+    def test_outer_mac_ipv4_gre_ipv6_gtpu_dl (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv4_gre_ipv6_gtpu_dl )\r
+\r
+    def test_outer_mac_ipv6_gre_ipv4_gtpu_eh (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv6_gre_ipv4_gtpu_eh )\r
+\r
+    def test_outer_mac_ipv6_gre_ipv4_gtpu_ul (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv6_gre_ipv4_gtpu_ul )\r
+\r
+    def test_outer_mac_ipv6_gre_ipv4_gtpu_dl (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv6_gre_ipv4_gtpu_dl )\r
+\r
+    def test_outer_mac_ipv6_gre_ipv6_gtpu_eh (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv6_gre_ipv6_gtpu_eh )\r
+\r
+    def test_outer_mac_ipv6_gre_ipv6_gtpu_ul (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv6_gre_ipv6_gtpu_ul )\r
+\r
+    def test_outer_mac_ipv6_gre_ipv6_gtpu_dl (self):\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.fdirprocess.flow_director_validate(tvs_outer_mac_ipv6_gre_ipv6_gtpu_dl )\r
+\r
+    def test_negative_cases (self):\r
+        negative_rules = [\r
+            'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp dst is 13 / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions queue index 33 / mark id 13 / end',\r
+            'flow create 0 ingress pattern eth / ipv6 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is a/ ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions mark / rss / end',\r
+            'flow create 0 ingress pattern eth / ipv4 / gre / ipv6 / udp / gtpu / gtp_psc pdu_t is 2 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / tcp src is 13 dst is 23 / end actions queue index 3 / mark id 13 / end',\r
+            'flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv6 / udp / gtpu teid is 0x12 / gtp_psc pdu_t is 1 qfi is 0x100 / end actions rss queues 4 5 end / mark id 23 / end',\r
+            'flow create 0 ingress pattern eth / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / gre / ipv4 / udp / gtpu teid is 0x100000000 / gtp_psc pdu_t is 1 qfi is 0x3 / end actions drop / end',\r
+        ]\r
+        self.launch_testpmd(param_fdir=True)\r
+        self.rssprocess.create_rule(negative_rules, check_stats=False)\r
+\r
+    def test_exclusive_cases (self):\r
+        result_list = []\r
+\r
+        self.logger.info('Subcase 1: inner rule and outer rule')\r
+        result = True\r
+        rule_list = [\r
+            '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 / udp src is 13 dst is 23 / end actions queue index 13 / mark id 13 / end',\r
+            'flow create 0 ingress pattern eth / ipv4 src is 1.1.2.14 dst is 1.1.2.15 / gre / ipv4 / udp / gtpu teid is 0x12 / gtp_psc qfi is 0x3 / end actions queue index 14 / mark id 14 / end']\r
+        pkt = 'Ether(dst="00:11:22:33:44:55")/IP(src="1.1.2.14", dst="1.1.2.15")/GRE()/IP()/UDP()/GTP_U_Header(teid=0x12)/GTPPDUSessionContainer(QFI=0x3)/IP(src="1.1.2.4", dst="1.1.2.5")/UDP(sport=13, dport=23)'\r
+\r
+        self.launch_testpmd(param_fdir=True)\r
+        try:\r
+            self.rssprocess.create_rule(rule_list)\r
+        except Exception as e:\r
+            self.logger.warning('Subcase 1 failed: %s' % e)\r
+            result = False\r
+        hashes, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkt)\r
+        for queue in queues:\r
+            if '0xe' != queue:\r
+                result = False\r
+                self.logger.error('Error: queue index {} != 14'.format(queue))\r
+                continue\r
+        self.dut.send_expect("flow destroy 0 rule 1", "testpmd>")\r
+        hashes, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkt)\r
+        for queue in queues:\r
+            if '0xd' != queue:\r
+                result = False\r
+                self.logger.error('Error: queue index {} != 13'.format(queue))\r
+                continue\r
+        result_list.append(result)\r
+        self.dut.send_expect("quit", "# ")\r
+        self.logger.info("*********subcase test result %s" % result_list)\r
+\r
+        self.logger.info('Subcase 2: rule with eh and rule without eh')\r
+        result = True\r
+        rule_list = [\r
+            '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 / udp src is 13 dst is 23 / end actions queue index 13 / mark id 13 / end',\r
+            'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / udp src is 13 dst is 23 / end actions queue index 3 / mark id 3 / end']\r
+        pkt = ['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(sport=13, dport=23)',\r
+                '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(sport=13, dport=23)']\r
+\r
+        self.launch_testpmd(param_fdir=True)\r
+        try:\r
+            self.rssprocess.create_rule(rule_list)\r
+        except Exception as e:\r
+            self.logger.warning('Subcase 2 failed: %s' % e)\r
+            result = False\r
+        hashes, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkt[0])\r
+        for queue in queues:\r
+            if '0xd' != queue:\r
+                result = False\r
+                self.logger.error('Error: queue index {} != 13'.format(queue))\r
+                continue\r
+\r
+        hashes, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkt[1])\r
+        for queue in queues:\r
+            if '0x3' != queue:\r
+                result = False\r
+                self.logger.error('Error: queue index {} != 3'.format(queue))\r
+                continue\r
+        result_list.append(result)\r
+        self.dut.send_expect("quit", "# ")\r
+        self.logger.info("*********subcase test result %s" % result_list)\r
+\r
+        self.logger.info('Subcase 3: rule with l4 and rule without l4')\r
+        result = True\r
+        rule_list = [\r
+            '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',\r
+            '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 / udp src is 13 dst is 23 / end actions queue index 3 / mark id 3 / end']\r
+        pkt = ['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")',\r
+                '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(sport=13, dport=23)']\r
+\r
+        self.launch_testpmd(param_fdir=True)\r
+        try:\r
+            self.rssprocess.create_rule(rule_list)\r
+        except Exception as e:\r
+            self.logger.warning('Subcase 3 failed: %s' % e)\r
+            result = False\r
+        hashes, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkt[0])\r
+        for queue in queues:\r
+            if '0xd' != queue:\r
+                result = False\r
+                self.logger.error('Error: queue index {} != 13'.format(queue))\r
+                continue\r
+\r
+        hashes, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkt[1])\r
+        for queue in queues:\r
+            if '0x3' != queue:\r
+                result = False\r
+                self.logger.error('Error: queue index {} != 3'.format(queue))\r
+                continue\r
+        result_list.append(result)\r
+        self.dut.send_expect("quit", "# ")\r
+        self.logger.info("*********subcase test result %s" % result_list)\r
+\r
+        self.logger.info('Subcase 4: rule with ul and rule without ul/dl')\r
+        result = True\r
+        rule_list = [\r
+            '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',\r
+            'flow create 0 ingress pattern eth / ipv4 / gre / ipv4 / udp / gtpu / gtp_psc pdu_t is 1 / ipv4 src is 1.1.2.4 dst is 1.1.2.5 / end actions queue index 3 / mark id 3 / end']\r
+        pkt = '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")'\r
+\r
+        self.launch_testpmd(param_fdir=True)\r
+        try:\r
+            self.rssprocess.create_rule(rule_list)\r
+        except Exception as e:\r
+            self.logger.warning('Subcase 4 failed: %s' % e)\r
+            result = False\r
+        hashes, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkt)\r
+        for queue in queues:\r
+            if '0x3' != queue:\r
+                result = False\r
+                self.logger.error('Error: queue index {} != 3'.format(queue))\r
+                continue\r
+        self.dut.send_expect("flow destroy 0 rule 1", "testpmd>")\r
+        hashes, queues = self.rssprocess.send_pkt_get_hash_queues(pkts=pkt)\r
+        for queue in queues:\r
+            if '0xd' != queue:\r
+                result = False\r
+                self.logger.error('Error: queue index {} != 13'.format(queue))\r
+                continue\r
+        result_list.append(result)\r
+        self.dut.send_expect("quit", "# ")\r
+        self.logger.info("*********subcase test result %s" % result_list)\r
+\r
+        self.logger.info('Subcase 5: ipv4/ipv4/ipv4 rule and ipv4/ipv6/ipv4 rule')\r
+        result = True\r
+        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"\r
+        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"\r
+        self.launch_testpmd(param_fdir=True)\r
+        try:\r
+            self.rssprocess.create_rule(rule1, check_stats=True)\r
+            self.rssprocess.create_rule(rule2, check_stats=False)\r
+        except Exception as e:\r
+            self.logger.warning('Subcase 5 failed: %s' % e)\r
+            result = False\r
+        result_list.append(result)\r
+        self.dut.send_expect("quit", "# ")\r
+        self.logger.info("*********subcase test result %s" % result_list)\r
+        for i in result_list:\r
+            self.verify( i is True, 'some subcase fail')\r
-- 
2.25.1


             reply	other threads:[~2021-09-16  6:25 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-16 14:57 qifu [this message]
2021-09-27  5:09 ` Tu, Lijuan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210916145717.1550917-1-qi.fu@intel.com \
    --to=qi.fu@intel.com \
    --cc=dts@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

test suite reviews and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://inbox.dpdk.org/dts/0 dts/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dts dts/ http://inbox.dpdk.org/dts \
		dts@dpdk.org
	public-inbox-index dts

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dts


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git