[V2,1/2] test_plans/dcf_switch_gtpu: add dcf_switch_filter_gtpu test plan

Message ID 20210602185053.12642-2-zhiminx.huang@intel.com (mailing list archive)
State Changes Requested
Headers
Series add dcf switch gtpu test case and test plan |

Commit Message

Huang, ZhiminX June 2, 2021, 6:50 p.m. UTC
  *.add cvl_dcf_switch_filter_gtpu testplan

Signed-off-by: Zhimin Huang <zhiminx.huang@intel.com>
---
 .../cvl_dcf_switch_filter_gtpu_test_plan.rst  | 1424 +++++++++++++++++
 1 file changed, 1424 insertions(+)
 create mode 100644 test_plans/cvl_dcf_switch_filter_gtpu_test_plan.rst
  

Comments

Lin, Xueqin June 10, 2021, 6:54 a.m. UTC | #1
> -----Original Message-----
> From: Huang, ZhiminX <zhiminx.huang@intel.com>
> Sent: Thursday, June 3, 2021 2:51 AM
> To: dts@dpdk.org
> Cc: Lin, Xueqin <xueqin.lin@intel.com>; Huang, ZhiminX
> <zhiminx.huang@intel.com>
> Subject: [dts] [PATCH V2 1/2] test_plans/dcf_switch_gtpu: add
> dcf_switch_filter_gtpu test plan
> 
> *.add cvl_dcf_switch_filter_gtpu testplan
> 
> Signed-off-by: Zhimin Huang <zhiminx.huang@intel.com>
Acked-by: Xueqin Lin <xueqin.lin@intel.com>
  
Tu, Lijuan June 18, 2021, 5:56 a.m. UTC | #2
> -----Original Message-----
> From: dts <dts-bounces@dpdk.org> On Behalf Of Zhimin Huang
> Sent: 2021年6月3日 2:51
> To: dts@dpdk.org
> Cc: Lin, Xueqin <xueqin.lin@intel.com>; Huang, ZhiminX
> <zhiminx.huang@intel.com>
> Subject: [dts] [PATCH V2 1/2] test_plans/dcf_switch_gtpu: add
> dcf_switch_filter_gtpu test plan
> 
> *.add cvl_dcf_switch_filter_gtpu testplan
> 
> Signed-off-by: Zhimin Huang <zhiminx.huang@intel.com>
> ---
>  .../cvl_dcf_switch_filter_gtpu_test_plan.rst  | 1424 +++++++++++++++++
>  1 file changed, 1424 insertions(+)
>  create mode 100644 test_plans/cvl_dcf_switch_filter_gtpu_test_plan.rst
> 
> diff --git a/test_plans/cvl_dcf_switch_filter_gtpu_test_plan.rst
> b/test_plans/cvl_dcf_switch_filter_gtpu_test_plan.rst
> new file mode 100644
> index 00000000..4991e0e6
> --- /dev/null
> +++ b/test_plans/cvl_dcf_switch_filter_gtpu_test_plan.rst
> @@ -0,0 +1,1424 @@
> +.. Copyright (c) <2021>, Intel Corporation
> +   All rights reserved.
> +
> +   Redistribution and use in source and binary forms, with or without
> +   modification, are permitted provided that the following conditions
> +   are met:
> +
> +   - Redistributions of source code must retain the above copyright
> +     notice, this list of conditions and the following disclaimer.
> +
> +   - Redistributions in binary form must reproduce the above copyright
> +     notice, this list of conditions and the following disclaimer in
> +     the documentation and/or other materials provided with the
> +     distribution.
> +
> +   - Neither the name of Intel Corporation nor the names of its
> +     contributors may be used to endorse or promote products derived
> +     from this software without specific prior written permission.
> +
> +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
> CONTRIBUTORS
> +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
> +   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
> +   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
> INDIRECT,
> +   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
> +   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> OR
> +   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> +   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
> CONTRACT,
> +   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> +   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
> +   OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +================================
> +CVL DCF Switch Filter GTPU Tests
> +================================
> +
> +Description
> +===========
> +
> +This document provides the plan for testing DCF switch filter of CVL

The description is not align with your subject and content.

And the file name is not align with existing test plan, e.g. 
test_plans/cvl_dcf_switch_filter_test_plan.rst 
test_plans/cvl_dcf_switch_filter_pppoe_test_plan.rst

> +
> +Pattern and input set
> +---------------------
> +
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |    Packet Types     |           Pattern             |                Input Set                             |
> +
> +=====================+===============================+==========
> ============================================+
> +  |                     |  MAC_IPV4_GTPU                |   [TEID], outer: l3[dst] [src]
> |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU                |   [TEID], outer: l3dst] [src]
> |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_IPV4           |   [TEID], inner: l3[dst] [src]
> |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_IPV4_TCP       |   [TEID], inner: l3[dst] [src]
> l4[dst] [src]         |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_IPV4_UDP       |   [TEID], inner: l3[dst] [src]
> l4[dst] [src]         |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_IPV6           |   [TEID], inner: l3[dst] [src]
> |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_IPV6_TCP       |   [TEID], inner: l3[dst] [src]
> l4[dst] [src]         |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_IPV6_UDP       |   [TEID], inner: l3[dst] [src]
> l4[dst] [src]         |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_IPV4           |   [TEID], inner: l3[dst] [src]
> |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_IPV4_TCP       |   [TEID], inner: l3[dst] [src]
> l4[dst] [src]         |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_IPV4_UDP       |   [TEID], inner: l3[dst] [src]
> l4[dst] [src]         |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_IPV6           |   [TEID], inner: l3[dst] [src]
> |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_IPV6_TCP       |   [TEID], inner: l3[dst] [src]
> l4[dst] [src]         |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_IPV6_UDP       |   [TEID], inner: l3[dst] [src]
> l4[dst] [src]         |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_EH_IPV4        |   [QFI] [TEID], inner: l3[dst]
> [src]                 |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_EH_IPV4_TCP    |   [QFI] [TEID], inner: l3[dst]
> [src] l4[dst] [src]   |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_EH_IPV4_UDP    |   [QFI] [TEID], inner: l3[dst]
> [src] l4[dst] [src]   |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_EH_IPV6        |   [QFI] [TEID], inner: l3[dst]
> [src]                 |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_EH_IPV6_TCP    |   [QFI] [TEID], inner: l3[dst]
> [src] l4[dst] [src]   |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV4_GTPU_EH_IPV6_UDP    |   [QFI] [TEID], inner: l3[dst]
> [src] l4[dst] [src]   |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_EH_IPV4        |   [QFI] [TEID], inner: l3[dst]
> [src]                 |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_EH_IPV4_TCP    |   [QFI] [TEID], inner: l3[dst]
> [src] l4[dst] [src]   |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_EH_IPV4_UDP    |   [QFI] [TEID], inner: l3[dst]
> [src] l4[dst] [src]   |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_EH_IPV6        |   [QFI] [TEID], inner: l3[dst]
> [src]                 |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_EH_IPV6_TCP    |   [QFI] [TEID], inner: l3[dst]
> [src] l4[dst] [src]   |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +  |                     |  MAC_IPV6_GTPU_EH_IPV6_UDP    |   [QFI] [TEID], inner: l3[dst]
> [src] l4[dst] [src]   |
> +  +---------------------+-------------------------------+--------------------------------------
> ----------------+
> +
> +.. note::
> +
> +   1. The maximum input set length of a switch rule is 32 bytes, and src ipv6,
> +      dst ipv6 account for 32 bytes. Therefore, for ipv6 cases, if need to test
> +      fields other than src, dst ip, we create rule by removing src or dst ip in
> +      the test plan.
> +
> +
> +Supported action type
> +---------------------
> +
> +* To vf/vsi
> +
> +
> +Prerequisites
> +=============
> +
> +1. Hardware:
> +   columbiaville_25g/columbiaville_100g
> +
> +2. Software::
> +
> +      dpdk: http://dpdk.org/git/dpdk
> +      scapy: http://www.secdev.org/projects/scapy/
> +
> +3. Copy specific ice package to /lib/firmware/updates/intel/ice/ddp/ice.pkg,
> +   then load driver::
> +
> +     rmmod ice
> +     insmod ice.ko
> +
> +4. Compile DPDK::
> +
> +     make -j install T=x86_64-native-linuxapp-gcc
> +
> +5. Get the pci device id of DUT, for example::
> +
> +     ./usertools/dpdk-devbind.py -s
> +
> +     0000:18:00.0 'Device 1593' if=enp24s0f0 drv=ice unused=vfio-pci
> +     0000:18:00.1 'Device 1593' if=enp24s0f1 drv=ice unused=vfio-pci
> +
> +6. Generate 2 VFs on PF0::
> +
> +     echo 2 > /sys/bus/pci/devices/0000:18:00.0/sriov_numvfs
> +
> +     ./usertools/dpdk-devbind.py -s
> +     0000:18:01.0 'Ethernet Adaptive Virtual Function 1889' if=enp24s1 drv=iavf
> unused=vfio-pci
> +     0000:18:01.1 'Ethernet Adaptive Virtual Function 1889' if=enp24s1f1
> drv=iavf unused=vfio-pci
> +
> +7. Set VF0 as trust::
> +
> +     ip link set enp24s0f0 vf 0 trust on
> +
> +8. Bind VFs to dpdk driver::
> +
> +     modprobe vfio-pci
> +     ./usertools/dpdk-devbind.py -b vfio-pci 0000:18:01.0 0000:18:01.1
> +
> +9. Launch dpdk on VF0 and VF1, and VF0 request DCF mode::
> +
> +     ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xf -n 4 -a
> 0000:18:01.0,cap=dcf -a 0000:18:01.1 -- -i
> +     testpmd> set portlist 1
> +     testpmd> set fwd rxonly
> +     testpmd> set verbose 1
> +     testpmd> start
> +     testpmd> show port info all
> +
> +   check the VF0 driver is net_ice_dcf.
> +
> +Test step:
> +==========
> +
> +* validate rule
> +* create rule
> +* send matched pkts and mismatched pkts
> +* destroy rule
> +* send matched pkts
> +* flush rule
> +
> +
> +take 'MAC_IPV4_GTPU_TEID_with_mask' for example:
> +
> +1.validate and create rule::
> +
> +   flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / end actions vf id 1 / end
> +   Flow rule validated
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / end actions vf id 1 / end
> +   Flow rule #0 created
> +
> +2.send 2 matched pkts and check port 1 received 2 pkts::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345678)/Ra
> w("x" *20)
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345688)/Ra
> w("x" *20)
> +
> +   ---------------------- Forward statistics for port 1  ----------------------
> +   RX-packets: 2              RX-dropped: 0             RX-total: 2
> +   TX-packets: 0              TX-dropped: 0             TX-total: 0
> +   ----------------------------------------------------------------------------
> +
> +   +++++++++++++++ Accumulated forward statistics for all
> ports+++++++++++++++
> +   RX-packets: 2              RX-dropped: 0             RX-total: 2
> +   TX-packets: 0              TX-dropped: 0             TX-total: 0
> +
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++
> +
> +3.send 1 mismatched pkts and check port 1 not received pkts::
> +
> +   p =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345677)/Ra
> w("x" *20)
> +
> +   ---------------------- Forward statistics for port 1  ----------------------
> +   RX-packets: 0              RX-dropped: 0             RX-total: 0
> +   TX-packets: 0              TX-dropped: 0             TX-total: 0
> +   ----------------------------------------------------------------------------
> +
> +   +++++++++++++++ Accumulated forward statistics for all
> ports+++++++++++++++
> +   RX-packets: 0              RX-dropped: 0             RX-total: 0
> +   TX-packets: 0              TX-dropped: 0             TX-total: 0
> +
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++
> +
> +4.destory rule and re-send step 2 matched pkts check port 1 not received pkts::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345678)/Ra
> w("x" *20)
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345688)/Ra
> w("x" *20)
> +
> +   ---------------------- Forward statistics for port 1  ----------------------
> +   RX-packets: 0              RX-dropped: 0             RX-total: 0
> +   TX-packets: 0              TX-dropped: 0             TX-total: 0
> +   ----------------------------------------------------------------------------
> +
> +   +++++++++++++++ Accumulated forward statistics for all
> ports+++++++++++++++
> +   RX-packets: 0              RX-dropped: 0             RX-total: 0
> +   TX-packets: 0              TX-dropped: 0             TX-total: 0
> +
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++
> +
> +
> +Pattern: MAC_IPV4_GTPU
> +----------------------
> +
> +Test case: MAC_IPV4_GTPU
> +>>>>>>>>>>>>>>>>>>>>>>>>
> +
> +subcase 1: MAC_IPV4_GTPU_TEID_with_mask
> +:::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345678)/Ra
> w("x" *20)
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345688)/Ra
> w("x" *20)
> +
> +mismatched packets::
> +
> +   p3 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345677)/Ra
> w("x" *20)
> +
> +subcase 2: MAC_IPV4_GTPU_TEID_without_mask
> +::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end
> actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345678)/Ra
> w("x" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345688)/Ra
> w("x" *20)
> +   p3 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345677)/Ra
> w("x" *20)
> +
> +subcase 3: MAC_IPV4_GTPU_dst
> +::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 dst is 192.168.1.2 / udp / gtpu / end
> actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.2")/UDP()/GTP_U_Header()/R
> aw("x" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.22")/UDP()/GTP_U_Header()/
> Raw("x" *20)
> +
> +subcase 4: MAC_IPV4_GTPU_src
> +::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 / udp / gtpu / end
> actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1")/UDP()/GTP_U_Header()/R
> aw("x" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11")/UDP()/GTP_U_Header()/
> Raw("x" *20)
> +
> +subcase 5: MAC_IPV4_GTPU_src_dst
> +::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 dst is 192.168.1.2 /
> udp / gtpu / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1",
> dst="192.168.1.2")/UDP()/GTP_U_Header()/Raw("x" *20)
> +
> +mismatched packets::
> +
> +   p2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11",
> dst="192.168.1.2")/UDP()/GTP_U_Header()/Raw("x" *20)
> +   p3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1",
> dst="192.168.1.22")/UDP()/GTP_U_Header()/Raw("x" *20)
> +   p4 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11",
> dst="192.168.1.22")/UDP()/GTP_U_Header()/Raw("x" *20)
> +
> +subcase 6: MAC_IPV4_GTPU_teid_dst
> +:::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 dst is 192.168.1.2 / udp / gtpu teid is
> 0x12345678 teid mask 0x00000001 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.2")/UDP()/GTP_U_Header(tei
> d=0x12345678)/Raw("x" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.22")/UDP()/GTP_U_Header(te
> id=0x12345678)/Raw("x" *20)
> +   p3 =
> Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.2")/UDP()/GTP_U_Header(tei
> d=0x12345677)/Raw("x" *20)
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.22")/UDP()/GTP_U_Header(te
> id=0x12345677)/Raw("x" *20)
> +
> +subcase 7: MAC_IPV4_GTPU_teid_src
> +:::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 / udp / gtpu teid is
> 0x12345678 teid mask 0x00000001 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1")/UDP()/GTP_U_Header(tei
> d=0x12345678)/Raw("x" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11")/UDP()/GTP_U_Header(te
> id=0x12345678)/Raw("x" *20)
> +   p3 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1")/UDP()/GTP_U_Header(tei
> d=0x12345677)/Raw("x" *20)
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11")/UDP()/GTP_U_Header(te
> id=0x12345677)/Raw("x" *20)
> +
> +
> +subcase 8: MAC_IPV4_GTPU_ALL
> +::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 dst is 192.168.1.2 /
> udp / gtpu teid is 0x12345678 teid mask 0x00000001 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1",
> dst="192.168.1.2")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
> +
> +mismatched packets::
> +
> +   p2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11",
> dst="192.168.1.2")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
> +   p3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1",
> dst="192.168.1.22")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
> +   p4 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11",
> dst="192.168.1.22")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
> +   p5 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11",
> dst="192.168.1.22")/UDP()/GTP_U_Header(teid=0x12345677)/Raw("x" *20)
> +
> +Pattern: MAC_IPV6_GTPU
> +----------------------
> +reconfig all the cases of "Test case: MAC_IPV4_GTPU"
> +
> +    rule:
> +        change ipv4 to ipv6, ipv4 address to ipv6 address.
> +    packets:
> +        change the packet's L3 layer from IP to IPv6;
> +        change the ipv4 address to ipv6 address.
> +
> +Test case: MAC_IPV6_GTPU
> +>>>>>>>>>>>>>>>>>>>>>>>>
> +
> +subcase 1: MAC_IPV6_GTPU_TEID_with_mask
> +:::::::::::::::::::::::::::::::::::::::
> +
> +subcase 2: MAC_IPV6_GTPU_TEID_without_mask
> +::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 3: MAC_IPV6_GTPU_dst
> +::::::::::::::::::::::::::::
> +
> +subcase 4: MAC_IPV6_GTPU_src
> +::::::::::::::::::::::::::::
> +
> +subcase 5: MAC_IPV6_GTPU_src_dst
> +::::::::::::::::::::::::::::::::
> +
> +subcase 6: MAC_IPV6_GTPU_teid_dst
> +:::::::::::::::::::::::::::::::::
> +
> +subcase 7: MAC_IPV6_GTPU_teid_src
> +:::::::::::::::::::::::::::::::::
> +
> +subcase 8: MAC_IPV4_GTPU_ALL
> +::::::::::::::::::::::::::::
> +
> +Pattern: outer ipv4 + inner ipv4
> +--------------------------------
> +
> +Test case: MAC_IPV4_GTPU_EH_IPV4
> +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> +
> +basic pkts:
> +
> +ipv4-nonfrag packet::
> +
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP()/("X" *20)
> +
> +ipv4-frag packet::
> +
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(frag=6)/("X" *20)
> +
> +subcase 1: MAC_IPV4_GTPU_EH_IPV4_TEID_with_mask
> +:::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / gtp_psc / ipv4 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1: send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345678)
> +   pkts_set2: send pkts_set1 with teid 0x12345688
> +
> +mismatched packets::
> +
> +   pkts_set3: send pkts_set1 with teid 0x12345677
> +
> +subcase 2: MAC_IPV4_GTPU_EH_IPV4_TEID_without_mask
> +::::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc / ipv4 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345678)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with teid 0x12345677
> +   pkts_set3: send pkts_set1 with teid 0x12345688
> +
> +subcase 3: MAC_IPV4_GTPU_EH_IPV4_QFI
> +::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / ipv4
> / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1: send basic pkts with GTPPDUSessionContainer(QFI=0x34)
> +
> +mismatched packets::
> +
> +   pkts_set2: send basic pkts with qfi 0x33
> +
> +subcase 4: MAC_IPV4_GTPU_EH_IPV4_L3DST
> +::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 dst is
> 192.168.1.2 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1: send basic pkts with inner l3dst, take 'ipv4-nonfrag' for example:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.2")/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3dst, take 'ipv4-nonfrag' for
> example:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.22")/("X" *20)
> +
> +subcase 5: MAC_IPV4_GTPU_EH_IPV4_L3SRC
> +::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is
> 192.168.1.1 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1: send basic pkts with inner l3src, take 'ipv4-nonfrag' for example:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1")/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src, take 'ipv4-nonfrag' for
> example:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11")/("X" *20)
> +
> +subcase 6: MAC_IPV4_GTPU_EH_IPV4_L3SRC_L3DST
> +::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is
> 192.168.1.1 dst is 192.168.1.2 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1: send basic pkts with inner l3src l3dst, take 'ipv4-nonfrag' for
> example:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1", dst="192.168.1.2")/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src l3dst, take 'ipv4-nonfrag'
> for example:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11", dst="192.168.1.2")/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1", dst="192.168.1.22")/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
> +
> +subcase 7: MAC_IPV4_GTPU_EH_IPV4_TEID_L3SRC_L3DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu  teid is 0x12345678 teid
> mask 0x00000001 / gtp_psc / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / end
> actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1: send basic pkts with inner l3src l3dst, take 'ipv4-nonfrag' for
> example:
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer()/IP(src="192.168.1.1",
> dst="192.168.1.2")/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src l3dst, take 'ipv4-nonfrag'
> for example:
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer()/IP(src="192.168.1.11",
> dst="192.168.1.22")/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/GTPPDUSessionContainer()/IP(src="192.168.1.1",
> dst="192.168.1.2")/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/GTPPDUSessionContainer()/IP(src="192.168.1.11",
> dst="192.168.1.21")/("X" *20)
> +
> +subcase 8: MAC_IPV4_GTPU_EH_IPV4_QFI_L3SRC_L3DST
> +::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / ipv4
> src is 192.168.1.1 dst is 192.168.1.2 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1: send basic pkts with inner l3src l3dst, take 'ipv4-nonfrag' for
> example:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x34)/IP(src="192.168.1.1", dst="192.168.1.2")/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src l3dst, take 'ipv4-nonfrag'
> for example:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x34)/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x33)/IP(src="192.168.1.1", dst="192.168.1.2")/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x33)/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
> +
> +
> +subcase 9: MAC_IPV4_GTPU_EH_IPV4_ALL
> +::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu  teid is 0x12345678 teid
> mask 0x00000001 / gtp_psc qfi is 0x34 / ipv4 src is 192.168.1.1 dst is 192.168.1.2
> / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1: take 'ipv4-nonfrag' for example:
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1",
> dst="192.168.1.2")/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: take 'ipv4-nonfrag' for example:
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.11",
> dst="192.168.1.22")/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.1",
> dst="192.168.1.2")/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1",
> dst="192.168.1.2")/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.11",
> dst="192.168.1.22")/("X" *20)
> +
> +Test case: MAC_IPV4_GTPU_EH_IPV4_UDP
> +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> +
> +basic pkts::
> +
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP()/UDP()/("X" *20)
> +
> +subcase 1: MAC_IPV4_GTPU_EH_IPV4_UDP_TEID_with_mask
> +:::::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / gtp_psc / ipv4 / udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
> +   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345688)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
> +
> +subcase 2: MAC_IPV4_GTPU_EH_IPV4_UDP_TEID_without_mask
> +::::::::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc / ipv4 / udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345688)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
> +   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
> +
> +subcase 3: MAC_IPV4_GTPU_EH_IPV4_UDP_QFI
> +::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / ipv4
> / udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x34)/IP()/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x33)/IP()/UDP()/("X" *20)
> +
> +subcase 4: MAC_IPV4_GTPU_EH_IPV4_UDP_L3DST
> +::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 dst is
> 192.168.1.2 / udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.2")/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.22")/UDP()/("X" *20)
> +
> +subcase 5: MAC_IPV4_GTPU_EH_IPV4_UDP_L3SRC
> +::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is
> 192.168.1.1 / udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1")/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11")/UDP()/("X" *20)
> +
> +subcase 6: MAC_IPV4_GTPU_EH_IPV4_UDP_L3SRC_L3DST
> +::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is
> 192.168.1.1 dst is 192.168.1.2 / udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11", dst="192.168.1.2")/UDP()/("X" *20)
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1", dst="192.168.1.22")/UDP()/("X" *20)
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
> +
> +subcase 7: MAC_IPV4_GTPU_EH_IPV4_UDP_L3SRC_L4DST
> +::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is
> 192.168.1.1 / udp dst is 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1")/UDP(dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11")/UDP(dport=23)/("X" *20)
> +   p3 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1")/UDP(dport=13)/("X" *20)
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11")/UDP(dport=13)/("X" *20)
> +
> +subcase 8: MAC_IPV4_GTPU_EH_IPV4_UDP_L3SRC_L4SRC
> +::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is
> 192.168.1.1 / udp src is 22 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1")/UDP(sport=22)/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11")/UDP(sport=22)/("X" *20)
> +   p3 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1")/UDP(sport=12)/("X" *20)
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11")/UDP(sport=12)/("X" *20)
> +
> +
> +subcase 9: MAC_IPV4_GTPU_EH_IPV4_UDP_L3DST_L4SRC
> +::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 dst is
> 192.168.1.2 / udp src is 22 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.2")/UDP(sport=22)/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.22")/UDP(sport=22)/("X" *20)
> +   p3 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.2")/UDP(sport=12)/("X" *20)
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.22")/UDP(sport=12)/("X" *20)
> +
> +subcase 10: MAC_IPV4_GTPU_EH_IPV4_UDP_L3DST_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 dst is
> 192.168.1.2 / udp dst is 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.2")/UDP(dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.22")/UDP(dport=23)/("X" *20)
> +   p3 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.2")/UDP(dport=13)/("X" *20)
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(dst="192.168.1.22")/UDP(dport=13)/("X" *20)
> +
> +subcase 11: MAC_IPV4_GTPU_EH_IPV4_UDP_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp dst
> is 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP()/UDP(dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP()/UDP(dport=13)/("X" *20)
> +
> +subcase 12: MAC_IPV4_GTPU_EH_IPV4_UDP_L4SRC
> +:::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp src
> is 22 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP()/UDP(sport=22)/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP()/UDP(sport=12)/("X" *20)
> +
> +subcase 13: MAC_IPV4_GTPU_EH_IPV4_UDP_L4SRC_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp src
> is 22 dst is 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP()/UDP(sport=22, dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP()/UDP(sport=12, dport=23)/("X" *20)
> +   p3 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP()/UDP(sport=22, dport=13)/("X" *20)
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP()/UDP(sport=12, dport=13)/("X" *20)
> +
> +subcase 14: MAC_IPV4_GTPU_EH_IPV4_UDP_TEID_L3SRC_L3DST
> +::::::::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / gtp_psc / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp /
> end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer()/IP(src="192.168.1.1",
> dst="192.168.1.2")/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer()/IP(src="192.168.1.11",
> dst="192.168.1.22")/UDP()/("X" *20)
> +   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/GTPPDUSessionContainer()/IP(src="192.168.1.1",
> dst="192.168.1.2")/UDP()/("X" *20)
> +   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer()/IP(src="192.168.1.11",
> dst="192.168.1.22")/UDP()/("X" *20)
> +
> +subcase 15: MAC_IPV4_GTPU_EH_IPV4_UDP_QFI_L3SRC_L3DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / ipv4
> src is 192.168.1.1 dst is 192.168.1.2 / udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x34)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x34)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
> +   p3 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x33)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/("X" *20)
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x33)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
> +
> +subcase 16: MAC_IPV4_GTPU_EH_IPV4_UDP_TEID_L4SRC_L4DST
> +::::::::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / gtp_psc / ipv4 / udp src is 22 dst is 23 / end actions vf id 1 /
> end
> +
> +matched packets::
> +
> +   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer()/IP()/UDP(sport=22,
> dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer()/IP()/UDP(sport=12,
> dport=13)/("X" *20)
> +   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/GTPPDUSessionContainer()/IP()/UDP(sport=22,
> dport=23)/("X" *20)
> +   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/GTPPDUSessionContainer()/IP()/UDP(sport=12,
> dport=13)/("X" *20)
> +
> +subcase 17: MAC_IPV4_GTPU_EH_IPV4_UDP_QFI_L4SRC_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / ipv4
> / udp src is 22 dst is 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x34)/IP()/UDP(sport=22, dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x34)/IP()/UDP(sport=12, dport=13)/("X" *20)
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x33)/IP()/UDP(sport=22, dport=23)/("X" *20)
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer(QFI=0x33)/IP()/UDP(sport=12, dport=13)/("X" *20)
> +
> +subcase 18: MAC_IPV4_GTPU_EH_IPV4_UDP_L3_l4
> +:::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is
> 192.168.1.1 dst is 192.168.1.2 / udp src is 22 dst is 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=22, dport=23)/("X"
> *20)
> +
> +mismatched packets::
> +
> +   p2 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=12, dport=23)/("X"
> *20)
> +   p3 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=22, dport=13)/("X"
> *20)
> +   p4 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=12, dport=13)/("X"
> *20)
> +   p5 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11", dst="192.168.1.2")/UDP(sport=22,
> dport=23)/("X" *20)
> +   p6 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.1", dst="192.168.1.22")/UDP(sport=22,
> dport=23)/("X" *20)
> +   p7 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11", dst="192.168.1.22")/UDP(sport=22,
> dport=23)/("X" *20)
> +   p8 =
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionCon
> tainer()/IP(src="192.168.1.11", dst="192.168.1.22")/UDP(sport=12,
> dport=13)/("X" *20)
> +
> +subcase 19: MAC_IPV4_GTPU_EH_IPV4_UDP_ALL
> +:::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / gtp_psc qfi is 0x34 / ipv4 src is 192.168.1.1 dst is 192.168.1.2
> / udp src is 22 dst is 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1",
> dst="192.168.1.2")/udp(sport=22, dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1",
> dst="192.168.1.2")/udp(sport=22, dport=23)/("X" *20)
> +   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.1",
> dst="192.168.1.2")/udp(sport=22, dport=23)/("X" *20)
> +   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.11",
> dst="192.168.1.22")/udp(sport=22, dport=23)/("X" *20)
> +   p5 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1",
> dst="192.168.1.2")/udp(sport=12, dport=13)/("X" *20)
> +   p6 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.11",
> dst="192.168.1.22")/udp(sport=12, dport=13)/("X" *20)
> +
> +Test case: MAC_IPV4_GTPU_EH_IPV4_TCP
> +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> +
> +reconfig all case of 'Test case: MAC_IPV4_GTPU_EH_IPV4_UDP':
> +   rule and pkts:
> +      change inner 'udp' to 'tcp'
> +
> +subcase 1: MAC_IPV4_GTPU_EH_IPV4_TCP_TEID_with_mask
> +:::::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 2: MAC_IPV4_GTPU_EH_IPV4_TCP_TEID_without_mask
> +::::::::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 3: MAC_IPV4_GTPU_EH_IPV4_TCP_QFI
> +::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 4: MAC_IPV4_GTPU_EH_IPV4_TCP_L3DST
> +::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 5: MAC_IPV4_GTPU_EH_IPV4_TCP_L3SRC
> +::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 6: MAC_IPV4_GTPU_EH_IPV4_TCP_L3SRC_L3DST
> +::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 7: MAC_IPV4_GTPU_EH_IPV4_TCP_L3SRC_L4DST
> +::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 8: MAC_IPV4_GTPU_EH_IPV4_TCP_L3SRC_L4SRC
> +::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 9: MAC_IPV4_GTPU_EH_IPV4_TCP_L3DST_L4SRC
> +::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 10: MAC_IPV4_GTPU_EH_IPV4_TCP_L3DST_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 11: MAC_IPV4_GTPU_EH_IPV4_TCP_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 12: MAC_IPV4_GTPU_EH_IPV4_TCP_L4SRC
> +:::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 13: MAC_IPV4_GTPU_EH_IPV4_TCP_L4SRC_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 14: MAC_IPV4_GTPU_EH_IPV4_TCP_TEID_L3SRC_L3DST
> +::::::::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 15: MAC_IPV4_GTPU_EH_IPV4_TCP_QFI_L3SRC_L3DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 16: MAC_IPV4_GTPU_EH_IPV4_TCP_TEID_L4SRC_L4DST
> +::::::::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 17: MAC_IPV4_GTPU_EH_IPV4_TCP_QFI_L4SRC_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 18: MAC_IPV4_GTPU_EH_IPV4_TCP_L3_l4
> +:::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 19: MAC_IPV4_GTPU_EH_IPV4_TCP_ALL
> +:::::::::::::::::::::::::::::::::::::::::
> +
> +Test case: MAC_IPV4_GTPU_IPV4
> +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> +
> +basic pkts:
> +ipv4-nonfrag packet::
> +
> +   Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/("X" *20)
> +
> +ipv4-frag packet::
> +
> +    Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(frag=6)/("X"
> *20)
> +
> +subcase 1: MAC_IPV4_GTPU_IPV4_TEID_with_mask
> +::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / ipv4 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345678)
> +
> +   pkts_set2:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345688)
> +
> +mismatched packets::
> +
> +   pkts_set3:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345677)
> +
> +subcase 2: MAC_IPV4_GTPU_IPV4_TEID_without_mask
> +:::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / ipv4
> / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345678)
> +
> +mismatched packets::
> +
> +   pkts_set2:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345688)
> +
> +   pkts_set3:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345677)
> +
> +subcase 3: MAC_IPV4_GTPU_IPV4_L3DST
> +:::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 dst is 192.168.1.2 /
> end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3dst, take 'ipv4-nonfrag' for example:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2
> ")/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3dst:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2
> 2")/("X" *20)
> +
> +subcase 4: MAC_IPV4_GTPU_IPV4_L3SRC
> +:::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1 /
> end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3src, take 'ipv4-nonfrag' for example:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> ")/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1")/("X" *20)
> +
> +subcase 4: MAC_IPV4_GTPU_IPV4_L3SRC_L3DST
> +:::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1
> dst is 192.168.1.2 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3src l4dst, take 'ipv4-nonfrag' for
> example:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> " dst="192.168.1.2")/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src l4dst:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1", dst="192.168.1.2")/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> ", dst="192.168.1.22")/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1", dst="192.168.1.22")/("X" *20)
> +
> +subcase 5: MAC_IPV4_GTPU_IPV4_ALL
> +:::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / end actions vf id 1
> / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3src l4dst, take 'ipv4-nonfrag' for
> example:
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP(src="192.168.1.1" dst="192.168.1.2")/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src:
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
> +
> +Test case: MAC_IPV4_GTPU_IPV4_UDP
> +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> +
> +basic pkts::
> +
> +    Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP()/("X"
> *20)
> +
> +subcase 1: MAC_IPV4_GTPU_IPV4_UDP_TEID_with_mask
> +::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / ipv4 / udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345678)
> +
> +   pkts_set2:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345688)
> +
> +mismatched packets::
> +
> +   pkts_set3:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345677)
> +
> +subcase 2: MAC_IPV4_GTPU_IPV4_UDP_TEID_without_mask
> +:::::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / ipv4
> / udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345678)
> +
> +mismatched packets::
> +
> +   pkts_set2:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345688)
> +
> +   pkts_set3:send basic pkts with GTP_U_Header(gtp_type=255,
> teid=0x12345677)
> +
> +
> +subcase 3: MAC_IPV4_GTPU_IPV4_UDP_L3DST
> +:::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 dst is 192.168.1.2 /
> udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2
> ")/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3dst:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2
> 2")/UDP()/("X" *20)
> +
> +subcase 4: MAC_IPV4_GTPU_IPV4_UDP_L3SRC
> +:::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1 /
> udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3src
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> ")/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src:
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1")/UDP()/("X" *20)
> +
> +subcase 5: MAC_IPV4_GTPU_IPV4_UDP_L3SRC_L3DST
> +:::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1
> dst is 192.168.1.2 / udp / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3src l3dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> " dst="192.168.1.2")/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src l3dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1", dst="192.168.1.2")/UDP()/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> ", dst="192.168.1.22")/UDP()/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1", dst="192.168.1.22")/UDP()/("X" *20)
> +
> +subcase 6: MAC_IPV4_GTPU_IPV4_UDP_L3SRC_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1 /
> udp dst is 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3src l4dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> ")/UDP(dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src l4dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1")/UDP(dport=23)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> ")/UDP(dport=13)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1")/UDP(dport=13)/("X" *20)
> +
> +subcase 7: MAC_IPV4_GTPU_IPV4_UDP_L3SRC_L4SRC
> +:::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1 /
> udp src is 22 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3src l4src
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> ")/UDP(sport=22)/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src l4src
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1")/UDP(sport=22)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> ")/UDP(sport=12)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1")/UDP(sport=12)/("X" *20)
> +
> +subcase 8: MAC_IPV4_GTPU_IPV4_UDP_L3DST_L4SRC
> +:::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 dst is 192.168.1.2 /
> udp src is 22 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3dst l4src
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2
> ")/UDP(sport=22)/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3dst l4src
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.1
> 2")/UDP(sport=22)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2
> ")/UDP(sport=12)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.1
> 2")/UDP(sport=12)/("X" *20)
> +
> +subcase 9: MAC_IPV4_GTPU_IPV4_UDP_L3DST_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 dst is 192.168.1.2 /
> udp dst is 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3dst l4dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2
> ")/UDP(dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3dst l4dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.1
> 2")/UDP(dport=23)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2
> ")/UDP(dport=13)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.1
> 2")/UDP(dport=13)/("X" *20)
> +
> +subcase 10: MAC_IPV4_GTPU_IPV4_UDP_L4DST
> +::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp dst is 23 / end
> actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l4dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(dport=23)
> /("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l4dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(dport=13)
> /("X" *20)
> +
> +subcase 11: MAC_IPV4_GTPU_IPV4_UDP_L4SRC
> +::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp src is 22 / end
> actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l4src
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=22)/
> ("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l4src
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=12)/
> ("X" *20)
> +
> +subcase 12: MAC_IPV4_GTPU_IPV4_UDP_L4SRC_L4DST
> +::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp src is 22 dst is
> 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l4src l4dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=22,
> dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l4src l4dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=22,
> dport=13)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=12,
> dport=23)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=12,
> dport=13)/("X" *20)
> +
> +subcase 13: MAC_IPV4_GTPU_IPV4_UDP_TIED_L3SRC_L3DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp / end actions
> vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3src l3dst
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP(src="192.168.1.1" dst="192.168.1.2")/UDP()/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src l3dst
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
> +
> +
> +subcase 14: MAC_IPV4_GTPU_IPV4_UDP_TEID_L4SRC_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / ipv4 / udp src is 22 dst is 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l4src l4dst
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/UDP(sport=22, dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l4src l4dst
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/UDP(sport=12, dport=13)/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/IP()/UDP(sport=22, dport=23)/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/IP()/UDP(sport=12, dport=13)/("X" *20)
> +
> +
> +subcase 15: MAC_IPV4_GTPU_IPV4_UDP_L3_L4
> +::::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1
> dst is 192.168.1.2 / udp src is 22 dst is 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3src l3dst l4src l4dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> ", dst="192.168.1.2")/UDP(sport=22, dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src l3dst l4src l4dst
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1", dst="192.168.1.22")/UDP(sport=22, dport=23)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> ", dst="192.168.1.2")/UDP(sport=12, dport=13)/("X" *20)
> +
> Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1
> 1", dst="192.168.1.22")/UDP(sport=12, dport=13)/("X" *20)
> +
> +subcase 16: MAC_IPV4_GTPU_IPV4_UDP_ALL
> +::::::::::::::::::::::::::::::::::::::
> +rule::
> +
> +   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid
> mask 0x00000001 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp src is 22 dst is
> 23 / end actions vf id 1 / end
> +
> +matched packets::
> +
> +   pkts_set1:send basic pkts with inner l3src l3dst l4src l4dst
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=22,
> dport=23)/("X" *20)
> +
> +mismatched packets::
> +
> +   pkts_set2: send pkts_set1 with different inner l3src l3dst l4src l4dst
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP(sport=22,
> dport=23)/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=12,
> dport=13)/("X" *20)
> +      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255,
> teid=0x12345677)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP(sport=12,
> dport=13)/("X" *20)
> +
> +
> +Test case: MAC_IPV4_GTPU_IPV4_TCP
> +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> +
> +reconfig all case of 'Test case: MAC_IPV4_GTPU_IPV4_UDP':
> +   rule and pkts:
> +      change inner 'udp' to 'tcp'
> +
> +subcase 1: MAC_IPV4_GTPU_IPV4_TCP_TEID_with_mask
> +::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 2: MAC_IPV4_GTPU_IPV4_TCP_TEID_without_mask
> +:::::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 3: MAC_IPV4_GTPU_IPV4_TCP_L3DST
> +:::::::::::::::::::::::::::::::::::::::
> +
> +subcase 4: MAC_IPV4_GTPU_IPV4_TCP_L3SRC
> +:::::::::::::::::::::::::::::::::::::::
> +
> +subcase 5: MAC_IPV4_GTPU_IPV4_TCP_L3SRC_L3DST
> +:::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 6: MAC_IPV4_GTPU_IPV4_TCP_L3SRC_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 7: MAC_IPV4_GTPU_IPV4_TCP_L3SRC_L4SRC
> +:::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 8: MAC_IPV4_GTPU_IPV4_TCP_L3DST_L4SRC
> +:::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 9: MAC_IPV4_GTPU_IPV4_TCP_L3DST_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 10: MAC_IPV4_GTPU_IPV4_TCP_L4DST
> +::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 11: MAC_IPV4_GTPU_IPV4_TCP_L4SRC
> +::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 12: MAC_IPV4_GTPU_IPV4_TCP_L4SRC_L4DST
> +::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 13: MAC_IPV4_GTPU_IPV4_TCP_TIED_L3SRC_L3DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 14: MAC_IPV4_GTPU_IPV4_TCP_TEID_L4SRC_L4DST
> +:::::::::::::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 15: MAC_IPV4_GTPU_IPV4_TCP_L3_L4
> +::::::::::::::::::::::::::::::::::::::::
> +
> +subcase 16: MAC_IPV4_GTPU_IPV4_TCP_ALL
> +::::::::::::::::::::::::::::::::::::::
> +
> +Pattern: outer ipv4 + inner ipv6
> +--------------------------------
> +
> +reconfig all the cases of "Pattern: outer ipv4 + inner ipv4"
> +
> +    rule:
> +        change inner ipv4 to ipv6
> +    packets:
> +        change the packet's inner L3 layer from IP to IPv6;
> +        change the ipv4 address to ipv6 address.
> +
> +Pattern: outer ipv6 + inner ipv4
> +--------------------------------
> +
> +reconfig all the cases of "Pattern: outer ipv4 + inner ipv4"
> +
> +    rule:
> +        change outer ipv4 to ipv6.
> +    packets:
> +        change the packet's outer L3 layer from IP to IPv6;
> +
> +Pattern: outer ipv6 + inner ipv6
> +--------------------------------
> +
> +reconfig all the cases of "Pattern: outer ipv4 + inner ipv4"
> +
> +    rule:
> +        change outer ipv4 to ipv6.
> +        change inner ipv4 to ipv6.
> +    packets:
> +        change the packet's outer L3 layer from IP to IPv6;
> +        change the packet's inner L3 layer from IP to IPv6;
> +        change the ipv4 address to ipv6 address.
> --
> 2.17.1
  

Patch

diff --git a/test_plans/cvl_dcf_switch_filter_gtpu_test_plan.rst b/test_plans/cvl_dcf_switch_filter_gtpu_test_plan.rst
new file mode 100644
index 00000000..4991e0e6
--- /dev/null
+++ b/test_plans/cvl_dcf_switch_filter_gtpu_test_plan.rst
@@ -0,0 +1,1424 @@ 
+.. Copyright (c) <2021>, Intel Corporation
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   - Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+
+   - Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+
+   - Neither the name of Intel Corporation nor the names of its
+     contributors may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+   OF THE POSSIBILITY OF SUCH DAMAGE.
+
+================================
+CVL DCF Switch Filter GTPU Tests
+================================
+
+Description
+===========
+
+This document provides the plan for testing DCF switch filter of CVL
+
+Pattern and input set
+---------------------
+
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |    Packet Types     |           Pattern             |                Input Set                             |
+  +=====================+===============================+======================================================+
+  |                     |  MAC_IPV4_GTPU                |   [TEID], outer: l3[dst] [src]                       |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU                |   [TEID], outer: l3dst] [src]                        |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_IPV4           |   [TEID], inner: l3[dst] [src]                       |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_IPV4_TCP       |   [TEID], inner: l3[dst] [src] l4[dst] [src]         |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_IPV4_UDP       |   [TEID], inner: l3[dst] [src] l4[dst] [src]         |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_IPV6           |   [TEID], inner: l3[dst] [src]                       |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_IPV6_TCP       |   [TEID], inner: l3[dst] [src] l4[dst] [src]         |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_IPV6_UDP       |   [TEID], inner: l3[dst] [src] l4[dst] [src]         |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_IPV4           |   [TEID], inner: l3[dst] [src]                       |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_IPV4_TCP       |   [TEID], inner: l3[dst] [src] l4[dst] [src]         |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_IPV4_UDP       |   [TEID], inner: l3[dst] [src] l4[dst] [src]         |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_IPV6           |   [TEID], inner: l3[dst] [src]                       |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_IPV6_TCP       |   [TEID], inner: l3[dst] [src] l4[dst] [src]         |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_IPV6_UDP       |   [TEID], inner: l3[dst] [src] l4[dst] [src]         |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_EH_IPV4        |   [QFI] [TEID], inner: l3[dst] [src]                 |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_EH_IPV4_TCP    |   [QFI] [TEID], inner: l3[dst] [src] l4[dst] [src]   |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_EH_IPV4_UDP    |   [QFI] [TEID], inner: l3[dst] [src] l4[dst] [src]   |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_EH_IPV6        |   [QFI] [TEID], inner: l3[dst] [src]                 |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_EH_IPV6_TCP    |   [QFI] [TEID], inner: l3[dst] [src] l4[dst] [src]   |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV4_GTPU_EH_IPV6_UDP    |   [QFI] [TEID], inner: l3[dst] [src] l4[dst] [src]   |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_EH_IPV4        |   [QFI] [TEID], inner: l3[dst] [src]                 |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_EH_IPV4_TCP    |   [QFI] [TEID], inner: l3[dst] [src] l4[dst] [src]   |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_EH_IPV4_UDP    |   [QFI] [TEID], inner: l3[dst] [src] l4[dst] [src]   |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_EH_IPV6        |   [QFI] [TEID], inner: l3[dst] [src]                 |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_EH_IPV6_TCP    |   [QFI] [TEID], inner: l3[dst] [src] l4[dst] [src]   |
+  +---------------------+-------------------------------+------------------------------------------------------+
+  |                     |  MAC_IPV6_GTPU_EH_IPV6_UDP    |   [QFI] [TEID], inner: l3[dst] [src] l4[dst] [src]   |
+  +---------------------+-------------------------------+------------------------------------------------------+
+
+.. note::
+
+   1. The maximum input set length of a switch rule is 32 bytes, and src ipv6,
+      dst ipv6 account for 32 bytes. Therefore, for ipv6 cases, if need to test
+      fields other than src, dst ip, we create rule by removing src or dst ip in
+      the test plan.
+
+
+Supported action type
+---------------------
+
+* To vf/vsi
+
+
+Prerequisites
+=============
+
+1. Hardware:
+   columbiaville_25g/columbiaville_100g
+
+2. Software::
+
+      dpdk: http://dpdk.org/git/dpdk
+      scapy: http://www.secdev.org/projects/scapy/
+
+3. Copy specific ice package to /lib/firmware/updates/intel/ice/ddp/ice.pkg,
+   then load driver::
+
+     rmmod ice
+     insmod ice.ko
+
+4. Compile DPDK::
+
+     make -j install T=x86_64-native-linuxapp-gcc
+
+5. Get the pci device id of DUT, for example::
+
+     ./usertools/dpdk-devbind.py -s
+
+     0000:18:00.0 'Device 1593' if=enp24s0f0 drv=ice unused=vfio-pci
+     0000:18:00.1 'Device 1593' if=enp24s0f1 drv=ice unused=vfio-pci
+
+6. Generate 2 VFs on PF0::
+
+     echo 2 > /sys/bus/pci/devices/0000:18:00.0/sriov_numvfs
+
+     ./usertools/dpdk-devbind.py -s
+     0000:18:01.0 'Ethernet Adaptive Virtual Function 1889' if=enp24s1 drv=iavf unused=vfio-pci
+     0000:18:01.1 'Ethernet Adaptive Virtual Function 1889' if=enp24s1f1 drv=iavf unused=vfio-pci
+
+7. Set VF0 as trust::
+
+     ip link set enp24s0f0 vf 0 trust on
+
+8. Bind VFs to dpdk driver::
+
+     modprobe vfio-pci
+     ./usertools/dpdk-devbind.py -b vfio-pci 0000:18:01.0 0000:18:01.1
+
+9. Launch dpdk on VF0 and VF1, and VF0 request DCF mode::
+
+     ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xf -n 4 -a 0000:18:01.0,cap=dcf -a 0000:18:01.1 -- -i
+     testpmd> set portlist 1
+     testpmd> set fwd rxonly
+     testpmd> set verbose 1
+     testpmd> start
+     testpmd> show port info all
+
+   check the VF0 driver is net_ice_dcf.
+
+Test step:
+==========
+
+* validate rule
+* create rule
+* send matched pkts and mismatched pkts
+* destroy rule
+* send matched pkts
+* flush rule
+
+
+take 'MAC_IPV4_GTPU_TEID_with_mask' for example:
+
+1.validate and create rule::
+
+   flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / end actions vf id 1 / end
+   Flow rule validated
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / end actions vf id 1 / end
+   Flow rule #0 created
+
+2.send 2 matched pkts and check port 1 received 2 pkts::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345688)/Raw("x" *20)
+
+   ---------------------- Forward statistics for port 1  ----------------------
+   RX-packets: 2              RX-dropped: 0             RX-total: 2
+   TX-packets: 0              TX-dropped: 0             TX-total: 0
+   ----------------------------------------------------------------------------
+
+   +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
+   RX-packets: 2              RX-dropped: 0             RX-total: 2
+   TX-packets: 0              TX-dropped: 0             TX-total: 0
+   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+3.send 1 mismatched pkts and check port 1 not received pkts::
+
+   p = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345677)/Raw("x" *20)
+
+   ---------------------- Forward statistics for port 1  ----------------------
+   RX-packets: 0              RX-dropped: 0             RX-total: 0
+   TX-packets: 0              TX-dropped: 0             TX-total: 0
+   ----------------------------------------------------------------------------
+
+   +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
+   RX-packets: 0              RX-dropped: 0             RX-total: 0
+   TX-packets: 0              TX-dropped: 0             TX-total: 0
+   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+4.destory rule and re-send step 2 matched pkts check port 1 not received pkts::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345688)/Raw("x" *20)
+
+   ---------------------- Forward statistics for port 1  ----------------------
+   RX-packets: 0              RX-dropped: 0             RX-total: 0
+   TX-packets: 0              TX-dropped: 0             TX-total: 0
+   ----------------------------------------------------------------------------
+
+   +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
+   RX-packets: 0              RX-dropped: 0             RX-total: 0
+   TX-packets: 0              TX-dropped: 0             TX-total: 0
+   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+Pattern: MAC_IPV4_GTPU
+----------------------
+
+Test case: MAC_IPV4_GTPU
+>>>>>>>>>>>>>>>>>>>>>>>>
+
+subcase 1: MAC_IPV4_GTPU_TEID_with_mask
+:::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345688)/Raw("x" *20)
+
+mismatched packets::
+
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345677)/Raw("x" *20)
+
+subcase 2: MAC_IPV4_GTPU_TEID_without_mask
+::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345688)/Raw("x" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(teid=0x12345677)/Raw("x" *20)
+
+subcase 3: MAC_IPV4_GTPU_dst
+::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 dst is 192.168.1.2 / udp / gtpu / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.2")/UDP()/GTP_U_Header()/Raw("x" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.22")/UDP()/GTP_U_Header()/Raw("x" *20)
+
+subcase 4: MAC_IPV4_GTPU_src
+::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 / udp / gtpu / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1")/UDP()/GTP_U_Header()/Raw("x" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11")/UDP()/GTP_U_Header()/Raw("x" *20)
+
+subcase 5: MAC_IPV4_GTPU_src_dst
+::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp / gtpu / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/GTP_U_Header()/Raw("x" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11", dst="192.168.1.2")/UDP()/GTP_U_Header()/Raw("x" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1", dst="192.168.1.22")/UDP()/GTP_U_Header()/Raw("x" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/GTP_U_Header()/Raw("x" *20)
+
+subcase 6: MAC_IPV4_GTPU_teid_dst
+:::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 dst is 192.168.1.2 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.2")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.22")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.2")/UDP()/GTP_U_Header(teid=0x12345677)/Raw("x" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.1.22")/UDP()/GTP_U_Header(teid=0x12345677)/Raw("x" *20)
+
+subcase 7: MAC_IPV4_GTPU_teid_src
+:::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1")/UDP()/GTP_U_Header(teid=0x12345677)/Raw("x" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11")/UDP()/GTP_U_Header(teid=0x12345677)/Raw("x" *20)
+
+
+subcase 8: MAC_IPV4_GTPU_ALL
+::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11", dst="192.168.1.2")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1", dst="192.168.1.22")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/GTP_U_Header(teid=0x12345678)/Raw("x" *20)
+   p5 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/GTP_U_Header(teid=0x12345677)/Raw("x" *20)
+
+Pattern: MAC_IPV6_GTPU
+----------------------
+reconfig all the cases of "Test case: MAC_IPV4_GTPU"
+
+    rule:
+        change ipv4 to ipv6, ipv4 address to ipv6 address.
+    packets:
+        change the packet's L3 layer from IP to IPv6;
+        change the ipv4 address to ipv6 address.
+
+Test case: MAC_IPV6_GTPU
+>>>>>>>>>>>>>>>>>>>>>>>>
+
+subcase 1: MAC_IPV6_GTPU_TEID_with_mask
+:::::::::::::::::::::::::::::::::::::::
+
+subcase 2: MAC_IPV6_GTPU_TEID_without_mask
+::::::::::::::::::::::::::::::::::::::::::
+
+subcase 3: MAC_IPV6_GTPU_dst
+::::::::::::::::::::::::::::
+
+subcase 4: MAC_IPV6_GTPU_src
+::::::::::::::::::::::::::::
+
+subcase 5: MAC_IPV6_GTPU_src_dst
+::::::::::::::::::::::::::::::::
+
+subcase 6: MAC_IPV6_GTPU_teid_dst
+:::::::::::::::::::::::::::::::::
+
+subcase 7: MAC_IPV6_GTPU_teid_src
+:::::::::::::::::::::::::::::::::
+
+subcase 8: MAC_IPV4_GTPU_ALL
+::::::::::::::::::::::::::::
+
+Pattern: outer ipv4 + inner ipv4
+--------------------------------
+
+Test case: MAC_IPV4_GTPU_EH_IPV4
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+basic pkts:
+
+ipv4-nonfrag packet::
+
+   Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP()/("X" *20)
+
+ipv4-frag packet::
+
+    Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(frag=6)/("X" *20)
+
+subcase 1: MAC_IPV4_GTPU_EH_IPV4_TEID_with_mask
+:::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / gtp_psc / ipv4 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1: send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345678)
+   pkts_set2: send pkts_set1 with teid 0x12345688
+
+mismatched packets::
+
+   pkts_set3: send pkts_set1 with teid 0x12345677
+
+subcase 2: MAC_IPV4_GTPU_EH_IPV4_TEID_without_mask
+::::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc / ipv4 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345678)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with teid 0x12345677
+   pkts_set3: send pkts_set1 with teid 0x12345688
+
+subcase 3: MAC_IPV4_GTPU_EH_IPV4_QFI
+::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / ipv4 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1: send basic pkts with GTPPDUSessionContainer(QFI=0x34)
+
+mismatched packets::
+
+   pkts_set2: send basic pkts with qfi 0x33
+
+subcase 4: MAC_IPV4_GTPU_EH_IPV4_L3DST
+::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 dst is 192.168.1.2 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1: send basic pkts with inner l3dst, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.2")/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3dst, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.22")/("X" *20)
+
+subcase 5: MAC_IPV4_GTPU_EH_IPV4_L3SRC
+::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is 192.168.1.1 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1: send basic pkts with inner l3src, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1")/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11")/("X" *20)
+
+subcase 6: MAC_IPV4_GTPU_EH_IPV4_L3SRC_L3DST
+::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1: send basic pkts with inner l3src l3dst, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.2")/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src l3dst, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11", dst="192.168.1.2")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.22")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
+
+subcase 7: MAC_IPV4_GTPU_EH_IPV4_TEID_L3SRC_L3DST
+:::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu  teid is 0x12345678 teid mask 0x00000001 / gtp_psc / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1: send basic pkts with inner l3src l3dst, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.2")/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src l3dst, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.2")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/GTPPDUSessionContainer()/IP(src="192.168.1.11", dst="192.168.1.21")/("X" *20)
+
+subcase 8: MAC_IPV4_GTPU_EH_IPV4_QFI_L3SRC_L3DST
+::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1: send basic pkts with inner l3src l3dst, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1", dst="192.168.1.2")/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src l3dst, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.1", dst="192.168.1.2")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
+
+
+subcase 9: MAC_IPV4_GTPU_EH_IPV4_ALL
+::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu  teid is 0x12345678 teid mask 0x00000001 / gtp_psc qfi is 0x34 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1: take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1", dst="192.168.1.2")/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.1", dst="192.168.1.2")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1", dst="192.168.1.2")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
+
+Test case: MAC_IPV4_GTPU_EH_IPV4_UDP
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+basic pkts::
+
+   Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
+
+subcase 1: MAC_IPV4_GTPU_EH_IPV4_UDP_TEID_with_mask
+:::::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / gtp_psc / ipv4 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345688)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
+
+mismatched packets::
+
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
+
+subcase 2: MAC_IPV4_GTPU_EH_IPV4_UDP_TEID_without_mask
+::::::::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc / ipv4 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345688)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/GTPPDUSessionContainer()/IP()/UDP()/("X" *20)
+
+subcase 3: MAC_IPV4_GTPU_EH_IPV4_UDP_QFI
+::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / ipv4 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x34)/IP()/UDP()/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x33)/IP()/UDP()/("X" *20)
+
+subcase 4: MAC_IPV4_GTPU_EH_IPV4_UDP_L3DST
+::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 dst is 192.168.1.2 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.2")/UDP()/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.22")/UDP()/("X" *20)
+
+subcase 5: MAC_IPV4_GTPU_EH_IPV4_UDP_L3SRC
+::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is 192.168.1.1 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1")/UDP()/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11")/UDP()/("X" *20)
+
+subcase 6: MAC_IPV4_GTPU_EH_IPV4_UDP_L3SRC_L3DST
+::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11", dst="192.168.1.2")/UDP()/("X" *20)
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.22")/UDP()/("X" *20)
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
+
+subcase 7: MAC_IPV4_GTPU_EH_IPV4_UDP_L3SRC_L4DST
+::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is 192.168.1.1 / udp dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1")/UDP(dport=23)/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11")/UDP(dport=23)/("X" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1")/UDP(dport=13)/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11")/UDP(dport=13)/("X" *20)
+
+subcase 8: MAC_IPV4_GTPU_EH_IPV4_UDP_L3SRC_L4SRC
+::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is 192.168.1.1 / udp src is 22 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1")/UDP(sport=22)/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11")/UDP(sport=22)/("X" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1")/UDP(sport=12)/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11")/UDP(sport=12)/("X" *20)
+
+
+subcase 9: MAC_IPV4_GTPU_EH_IPV4_UDP_L3DST_L4SRC
+::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 dst is 192.168.1.2 / udp src is 22 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.2")/UDP(sport=22)/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.22")/UDP(sport=22)/("X" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.2")/UDP(sport=12)/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.22")/UDP(sport=12)/("X" *20)
+
+subcase 10: MAC_IPV4_GTPU_EH_IPV4_UDP_L3DST_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 dst is 192.168.1.2 / udp dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.2")/UDP(dport=23)/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.22")/UDP(dport=23)/("X" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.2")/UDP(dport=13)/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(dst="192.168.1.22")/UDP(dport=13)/("X" *20)
+
+subcase 11: MAC_IPV4_GTPU_EH_IPV4_UDP_L4DST
+:::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP()/UDP(dport=23)/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP()/UDP(dport=13)/("X" *20)
+
+subcase 12: MAC_IPV4_GTPU_EH_IPV4_UDP_L4SRC
+:::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp src is 22 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP()/UDP(sport=22)/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP()/UDP(sport=12)/("X" *20)
+
+subcase 13: MAC_IPV4_GTPU_EH_IPV4_UDP_L4SRC_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / udp src is 22 dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP()/UDP(sport=22, dport=23)/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP()/UDP(sport=12, dport=23)/("X" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP()/UDP(sport=22, dport=13)/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP()/UDP(sport=12, dport=13)/("X" *20)
+
+subcase 14: MAC_IPV4_GTPU_EH_IPV4_UDP_TEID_L3SRC_L3DST
+::::::::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / gtp_psc / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
+
+subcase 15: MAC_IPV4_GTPU_EH_IPV4_UDP_QFI_L3SRC_L3DST
+:::::::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
+
+subcase 16: MAC_IPV4_GTPU_EH_IPV4_UDP_TEID_L4SRC_L4DST
+::::::::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / gtp_psc / ipv4 / udp src is 22 dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP()/UDP(sport=22, dport=23)/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP()/UDP(sport=12, dport=13)/("X" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/GTPPDUSessionContainer()/IP()/UDP(sport=22, dport=23)/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/GTPPDUSessionContainer()/IP()/UDP(sport=12, dport=13)/("X" *20)
+
+subcase 17: MAC_IPV4_GTPU_EH_IPV4_UDP_QFI_L4SRC_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / ipv4 / udp src is 22 dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x34)/IP()/UDP(sport=22, dport=23)/("X" *20)
+
+mismatched packets::
+
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x34)/IP()/UDP(sport=12, dport=13)/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x33)/IP()/UDP(sport=22, dport=23)/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer(QFI=0x33)/IP()/UDP(sport=12, dport=13)/("X" *20)
+
+subcase 18: MAC_IPV4_GTPU_EH_IPV4_UDP_L3_l4
+:::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp src is 22 dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=22, dport=23)/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=12, dport=23)/("X" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=22, dport=13)/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=12, dport=13)/("X" *20)
+   p5 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11", dst="192.168.1.2")/UDP(sport=22, dport=23)/("X" *20)
+   p6 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.1", dst="192.168.1.22")/UDP(sport=22, dport=23)/("X" *20)
+   p7 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11", dst="192.168.1.22")/UDP(sport=22, dport=23)/("X" *20)
+   p8 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/GTPPDUSessionContainer()/IP(src="192.168.1.11", dst="192.168.1.22")/UDP(sport=12, dport=13)/("X" *20)
+
+subcase 19: MAC_IPV4_GTPU_EH_IPV4_UDP_ALL
+:::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / gtp_psc qfi is 0x34 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp src is 22 dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   p1 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1", dst="192.168.1.2")/udp(sport=22, dport=23)/("X" *20)
+
+mismatched packets::
+
+   p2 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1", dst="192.168.1.2")/udp(sport=22, dport=23)/("X" *20)
+   p3 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.1", dst="192.168.1.2")/udp(sport=22, dport=23)/("X" *20)
+   p4 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.11", dst="192.168.1.22")/udp(sport=22, dport=23)/("X" *20)
+   p5 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(QFI=0x34)/IP(src="192.168.1.1", dst="192.168.1.2")/udp(sport=12, dport=13)/("X" *20)
+   p6 = Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/GTPPDUSessionContainer(QFI=0x33)/IP(src="192.168.1.11", dst="192.168.1.22")/udp(sport=12, dport=13)/("X" *20)
+
+Test case: MAC_IPV4_GTPU_EH_IPV4_TCP
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+reconfig all case of 'Test case: MAC_IPV4_GTPU_EH_IPV4_UDP':
+   rule and pkts:
+      change inner 'udp' to 'tcp'
+
+subcase 1: MAC_IPV4_GTPU_EH_IPV4_TCP_TEID_with_mask
+:::::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 2: MAC_IPV4_GTPU_EH_IPV4_TCP_TEID_without_mask
+::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 3: MAC_IPV4_GTPU_EH_IPV4_TCP_QFI
+::::::::::::::::::::::::::::::::::::::::
+
+subcase 4: MAC_IPV4_GTPU_EH_IPV4_TCP_L3DST
+::::::::::::::::::::::::::::::::::::::::::
+
+subcase 5: MAC_IPV4_GTPU_EH_IPV4_TCP_L3SRC
+::::::::::::::::::::::::::::::::::::::::::
+
+subcase 6: MAC_IPV4_GTPU_EH_IPV4_TCP_L3SRC_L3DST
+::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 7: MAC_IPV4_GTPU_EH_IPV4_TCP_L3SRC_L4DST
+::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 8: MAC_IPV4_GTPU_EH_IPV4_TCP_L3SRC_L4SRC
+::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 9: MAC_IPV4_GTPU_EH_IPV4_TCP_L3DST_L4SRC
+::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 10: MAC_IPV4_GTPU_EH_IPV4_TCP_L3DST_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 11: MAC_IPV4_GTPU_EH_IPV4_TCP_L4DST
+:::::::::::::::::::::::::::::::::::::::::::
+
+subcase 12: MAC_IPV4_GTPU_EH_IPV4_TCP_L4SRC
+:::::::::::::::::::::::::::::::::::::::::::
+
+subcase 13: MAC_IPV4_GTPU_EH_IPV4_TCP_L4SRC_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 14: MAC_IPV4_GTPU_EH_IPV4_TCP_TEID_L3SRC_L3DST
+::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 15: MAC_IPV4_GTPU_EH_IPV4_TCP_QFI_L3SRC_L3DST
+:::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 16: MAC_IPV4_GTPU_EH_IPV4_TCP_TEID_L4SRC_L4DST
+::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 17: MAC_IPV4_GTPU_EH_IPV4_TCP_QFI_L4SRC_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 18: MAC_IPV4_GTPU_EH_IPV4_TCP_L3_l4
+:::::::::::::::::::::::::::::::::::::::::::
+
+subcase 19: MAC_IPV4_GTPU_EH_IPV4_TCP_ALL
+:::::::::::::::::::::::::::::::::::::::::
+
+Test case: MAC_IPV4_GTPU_IPV4
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+basic pkts:
+ipv4-nonfrag packet::
+
+   Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/("X" *20)
+
+ipv4-frag packet::
+
+    Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(frag=6)/("X" *20)
+
+subcase 1: MAC_IPV4_GTPU_IPV4_TEID_with_mask
+::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / ipv4 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345678)
+
+   pkts_set2:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345688)
+
+mismatched packets::
+
+   pkts_set3:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345677)
+
+subcase 2: MAC_IPV4_GTPU_IPV4_TEID_without_mask
+:::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / ipv4 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345678)
+
+mismatched packets::
+
+   pkts_set2:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345688)
+
+   pkts_set3:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345677)
+
+subcase 3: MAC_IPV4_GTPU_IPV4_L3DST
+:::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 dst is 192.168.1.2 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3dst, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2")/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3dst:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.22")/("X" *20)
+
+subcase 4: MAC_IPV4_GTPU_IPV4_L3SRC
+:::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3src, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1")/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11")/("X" *20)
+
+subcase 4: MAC_IPV4_GTPU_IPV4_L3SRC_L3DST
+:::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3src l4dst, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1" dst="192.168.1.2")/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src l4dst:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11", dst="192.168.1.2")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1", dst="192.168.1.22")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
+
+subcase 5: MAC_IPV4_GTPU_IPV4_ALL
+:::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3src l4dst, take 'ipv4-nonfrag' for example:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src="192.168.1.1" dst="192.168.1.2")/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/IP(src="192.168.1.11", dst="192.168.1.22")/("X" *20)
+
+Test case: MAC_IPV4_GTPU_IPV4_UDP
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+basic pkts::
+
+    Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP()/("X" *20)
+
+subcase 1: MAC_IPV4_GTPU_IPV4_UDP_TEID_with_mask
+::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / ipv4 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345678)
+
+   pkts_set2:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345688)
+
+mismatched packets::
+
+   pkts_set3:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345677)
+
+subcase 2: MAC_IPV4_GTPU_IPV4_UDP_TEID_without_mask
+:::::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / ipv4 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345678)
+
+mismatched packets::
+
+   pkts_set2:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345688)
+
+   pkts_set3:send basic pkts with GTP_U_Header(gtp_type=255, teid=0x12345677)
+
+
+subcase 3: MAC_IPV4_GTPU_IPV4_UDP_L3DST
+:::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 dst is 192.168.1.2 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2")/UDP()/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3dst:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.22")/UDP()/("X" *20)
+
+subcase 4: MAC_IPV4_GTPU_IPV4_UDP_L3SRC
+:::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3src
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1")/UDP()/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src:
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11")/UDP()/("X" *20)
+
+subcase 5: MAC_IPV4_GTPU_IPV4_UDP_L3SRC_L3DST
+:::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3src l3dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1" dst="192.168.1.2")/UDP()/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src l3dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11", dst="192.168.1.2")/UDP()/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1", dst="192.168.1.22")/UDP()/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
+
+subcase 6: MAC_IPV4_GTPU_IPV4_UDP_L3SRC_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1 / udp dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3src l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1")/UDP(dport=23)/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11")/UDP(dport=23)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1")/UDP(dport=13)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11")/UDP(dport=13)/("X" *20)
+
+subcase 7: MAC_IPV4_GTPU_IPV4_UDP_L3SRC_L4SRC
+:::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1 / udp src is 22 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3src l4src
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1")/UDP(sport=22)/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src l4src
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11")/UDP(sport=22)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1")/UDP(sport=12)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11")/UDP(sport=12)/("X" *20)
+
+subcase 8: MAC_IPV4_GTPU_IPV4_UDP_L3DST_L4SRC
+:::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 dst is 192.168.1.2 / udp src is 22 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3dst l4src
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2")/UDP(sport=22)/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3dst l4src
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.12")/UDP(sport=22)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2")/UDP(sport=12)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.12")/UDP(sport=12)/("X" *20)
+
+subcase 9: MAC_IPV4_GTPU_IPV4_UDP_L3DST_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 dst is 192.168.1.2 / udp dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3dst l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2")/UDP(dport=23)/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3dst l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.12")/UDP(dport=23)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.2")/UDP(dport=13)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(dst="192.168.1.12")/UDP(dport=13)/("X" *20)
+
+subcase 10: MAC_IPV4_GTPU_IPV4_UDP_L4DST
+::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(dport=23)/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(dport=13)/("X" *20)
+
+subcase 11: MAC_IPV4_GTPU_IPV4_UDP_L4SRC
+::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp src is 22 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l4src
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=22)/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l4src
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=12)/("X" *20)
+
+subcase 12: MAC_IPV4_GTPU_IPV4_UDP_L4SRC_L4DST
+::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / udp src is 22 dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l4src l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=22, dport=23)/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l4src l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=22, dport=13)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=12, dport=23)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP()/UDP(sport=12, dport=13)/("X" *20)
+
+subcase 13: MAC_IPV4_GTPU_IPV4_UDP_TIED_L3SRC_L3DST
+:::::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3src l3dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src="192.168.1.1" dst="192.168.1.2")/UDP()/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src l3dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP()/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP()/("X" *20)
+
+
+subcase 14: MAC_IPV4_GTPU_IPV4_UDP_TEID_L4SRC_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / ipv4 / udp src is 22 dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l4src l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/UDP(sport=22, dport=23)/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l4src l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/UDP(sport=12, dport=13)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/IP()/UDP(sport=22, dport=23)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/IP()/UDP(sport=12, dport=13)/("X" *20)
+
+
+subcase 15: MAC_IPV4_GTPU_IPV4_UDP_L3_L4
+::::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp src is 22 dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3src l3dst l4src l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=22, dport=23)/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src l3dst l4src l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11", dst="192.168.1.22")/UDP(sport=22, dport=23)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=12, dport=13)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/IP(src="192.168.1.11", dst="192.168.1.22")/UDP(sport=12, dport=13)/("X" *20)
+
+subcase 16: MAC_IPV4_GTPU_IPV4_UDP_ALL
+::::::::::::::::::::::::::::::::::::::
+rule::
+
+   flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 teid mask 0x00000001 / ipv4 src is 192.168.1.1 dst is 192.168.1.2 / udp src is 22 dst is 23 / end actions vf id 1 / end
+
+matched packets::
+
+   pkts_set1:send basic pkts with inner l3src l3dst l4src l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=22, dport=23)/("X" *20)
+
+mismatched packets::
+
+   pkts_set2: send pkts_set1 with different inner l3src l3dst l4src l4dst
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP(sport=22, dport=23)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=12, dport=13)/("X" *20)
+      Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header(gtp_type=255, teid=0x12345677)/IP(src="192.168.1.11", dst="192.168.1.22")/UDP(sport=12, dport=13)/("X" *20)
+
+
+Test case: MAC_IPV4_GTPU_IPV4_TCP
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+reconfig all case of 'Test case: MAC_IPV4_GTPU_IPV4_UDP':
+   rule and pkts:
+      change inner 'udp' to 'tcp'
+
+subcase 1: MAC_IPV4_GTPU_IPV4_TCP_TEID_with_mask
+::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 2: MAC_IPV4_GTPU_IPV4_TCP_TEID_without_mask
+:::::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 3: MAC_IPV4_GTPU_IPV4_TCP_L3DST
+:::::::::::::::::::::::::::::::::::::::
+
+subcase 4: MAC_IPV4_GTPU_IPV4_TCP_L3SRC
+:::::::::::::::::::::::::::::::::::::::
+
+subcase 5: MAC_IPV4_GTPU_IPV4_TCP_L3SRC_L3DST
+:::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 6: MAC_IPV4_GTPU_IPV4_TCP_L3SRC_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 7: MAC_IPV4_GTPU_IPV4_TCP_L3SRC_L4SRC
+:::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 8: MAC_IPV4_GTPU_IPV4_TCP_L3DST_L4SRC
+:::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 9: MAC_IPV4_GTPU_IPV4_TCP_L3DST_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 10: MAC_IPV4_GTPU_IPV4_TCP_L4DST
+::::::::::::::::::::::::::::::::::::::::
+
+subcase 11: MAC_IPV4_GTPU_IPV4_TCP_L4SRC
+::::::::::::::::::::::::::::::::::::::::
+
+subcase 12: MAC_IPV4_GTPU_IPV4_TCP_L4SRC_L4DST
+::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 13: MAC_IPV4_GTPU_IPV4_TCP_TIED_L3SRC_L3DST
+:::::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 14: MAC_IPV4_GTPU_IPV4_TCP_TEID_L4SRC_L4DST
+:::::::::::::::::::::::::::::::::::::::::::::::::::
+
+subcase 15: MAC_IPV4_GTPU_IPV4_TCP_L3_L4
+::::::::::::::::::::::::::::::::::::::::
+
+subcase 16: MAC_IPV4_GTPU_IPV4_TCP_ALL
+::::::::::::::::::::::::::::::::::::::
+
+Pattern: outer ipv4 + inner ipv6
+--------------------------------
+
+reconfig all the cases of "Pattern: outer ipv4 + inner ipv4"
+
+    rule:
+        change inner ipv4 to ipv6
+    packets:
+        change the packet's inner L3 layer from IP to IPv6;
+        change the ipv4 address to ipv6 address.
+
+Pattern: outer ipv6 + inner ipv4
+--------------------------------
+
+reconfig all the cases of "Pattern: outer ipv4 + inner ipv4"
+
+    rule:
+        change outer ipv4 to ipv6.
+    packets:
+        change the packet's outer L3 layer from IP to IPv6;
+
+Pattern: outer ipv6 + inner ipv6
+--------------------------------
+
+reconfig all the cases of "Pattern: outer ipv4 + inner ipv4"
+
+    rule:
+        change outer ipv4 to ipv6.
+        change inner ipv4 to ipv6.
+    packets:
+        change the packet's outer L3 layer from IP to IPv6;
+        change the packet's inner L3 layer from IP to IPv6;
+        change the ipv4 address to ipv6 address.