test suite reviews and discussions
 help / color / mirror / Atom feed
* Re: [dts] [PATCH v2]test_plans: rework case struction
  2020-04-01  7:51 [dts] [PATCH v2]test_plans: rework case struction Peng Yuan
@ 2020-04-01  5:54 ` Tu, Lijuan
  0 siblings, 0 replies; 2+ messages in thread
From: Tu, Lijuan @ 2020-04-01  5:54 UTC (permalink / raw)
  To: Peng, Yuan, dts; +Cc: Peng, Yuan

Applied, thanks

> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Peng Yuan
> Sent: Wednesday, April 1, 2020 3:52 PM
> To: dts@dpdk.org
> Cc: Peng, Yuan <yuan.peng@intel.com>
> Subject: [dts] [PATCH v2]test_plans: rework case struction
> 
> 1/ rework the case stucture.
> 2/ add stress cases.
> 3/ add validate cases.
> 
> Signed-off-by: Peng Yuan <yuan.peng@intel.com>
> ---
>  test_plans/cvl_fdir_test_plan.rst | 3425 +++++++++++++------------------------
>  1 file changed, 1194 insertions(+), 2231 deletions(-)
> 
> diff --git a/test_plans/cvl_fdir_test_plan.rst
> b/test_plans/cvl_fdir_test_plan.rst
> index fe8cac5..08e8f21 100644
> --- a/test_plans/cvl_fdir_test_plan.rst
> +++ b/test_plans/cvl_fdir_test_plan.rst
> @@ -83,13 +83,14 @@ Pattern and input set
>      +------------------------------+----------------------------+----------------------------------
> ---------------------------------------------+
> 
>  Notes: 1. Enable fdir filter for UDP tunnel: Vxlan / NVGRE (OS default
> package) , share code not
> -      support outer header as inputset, so Out Dest IP and VNI/GRE_KEY may
> not able to be implemented.
> +          support outer header as inputset, so Out Dest IP and VNI/GRE_KEY
> may not able to be implemented.
>         2. For VXLAN case MAC_IPV4_TUN_*** means
> MAC_IPV4_UDP_VXLAN_***
>         3. For Dest MAC, there is package /sharecode limitation on multicast dst
> mac support for FDIR
> 
>  Function type
>  -------------
> 
> +    validate
>      create
>      list
>      destroy
> @@ -113,6 +114,7 @@ Prerequisites
> 
>  1. Hardware:
>     columbiaville_25g/columbiaville_100g
> +   design the cases with 2 ports card.
> 
>  2. Software:
>     DPDK: http://dpdk.org/git/dpdk
> @@ -127,7 +129,7 @@ Prerequisites
> 
>  5. Launch the app ``testpmd`` with the following arguments::
> 
> -    ./testpmd -c 0xff -n 6 -w 86:00.0 -- -i --portmask=0xff --rxq=64 --txq=64 --
> port-topology=loop
> +    ./testpmd -c 0xff -n 6 -w 86:00.0,,flow-mark-support=1 -- -i --
> portmask=0xff --rxq=64 --txq=64 --port-topology=loop
>      testpmd> set fwd rxonly
>      testpmd> set verbose 1
> 
> @@ -138,11 +140,7 @@ Prerequisites
> 
>     Notes: if need two ports environment, launch ``testpmd`` with the
> following arguments::
> 
> -    ./testpmd -c 0xff -n 6 -w 86:00.0 -w 86:00.1 -- -i --portmask=0xff --rxq=64 -
> -txq=64 --port-topology=loop
> -
> -   If create rules with mark actions, please add the following parameters in
> testpmd command line::
> -
> -    -w 86:00.0,flow-mark-support=1 -w 86:00.1,flow-mark-support=1
> +    ./testpmd -c 0xff -n 6 -w 86:00.0,flow-mark-support=1 -w 86:00.1,flow-
> mark-support=1 -- -i --portmask=0xff --rxq=64 --txq=64 --port-topology=loop
> 
> 
>  Default parameters
> @@ -397,669 +395,694 @@ Send packets
> 
>     matched packets::
> 
> -    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/Raw('x'*20)
> -    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP(frag=1)/Raw('x'*20)
> -    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/UDP()/Raw('x'*20)
> -    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
> -    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/ICMP()/Raw('x'*20)
> -    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/Raw('x'*20)
> -    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
> -    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/UDP()/Raw('x'*20)
> -    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
> -    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/ICMP()/Raw('x'*20)
> +    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/Raw('x'*20)
> +    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP(frag=1)/Raw('x'*20)
> +    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/UDP()/Raw('x'*20)
> +    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
> +    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/ICMP()/Raw('x'*20)
> +    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/Raw('x'*20)
> +    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
> +    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/UDP()/Raw('x'*20)
> +    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
> +    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/ICMP()/Raw('x'*20)
> 
>     mismatched packets::
> 
> -    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/SCTP()/Raw('x'*20)
> -    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/SCTP()/Raw('x'*20)
> -    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/Raw('x'*20)
> -    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x35)/IP()/Raw('x'*20)
> -    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/Raw('x'*20)
> -    p_gtpu16 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/Raw('x'*20)
> +    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/SCTP()/Raw('x'*20)
> +    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IPv6()/SCTP()/Raw('x'*20)
> +    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/Raw('x'*20)
> +    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x35)/IP()/Raw('x'*20)
> +    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/Raw('x'*20)
> +    p_gtpu16 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/Raw('x'*20)
> 
>  * MAC_IPV4_GTPU
> 
>     matched packets::
> 
> -    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/Raw('x'*20)
> -    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP(frag=1)/Raw('x'*20)
> -    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/UDP()/Raw('x'*20)
> -    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
> -    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/ICMP()/Raw('x'*20)
> -    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/Raw('x'*20)
> -    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
> -    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/UDP()/Raw('x'*20)
> -    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
> -    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/ICMP()/Raw('x'*20)
> -    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x35)/IP()/Raw('x'*20)
> +    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/Raw('x'*20)
> +    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP(frag=1)/Raw('x'*20)
> +    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/UDP()/Raw('x'*20)
> +    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
> +    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/ICMP()/Raw('x'*20)
> +    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/Raw('x'*20)
> +    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
> +    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/UDP()/Raw('x'*20)
> +    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
> +    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/ICMP()/Raw('x'*20)
> +    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x35)/IP()/Raw('x'*20)
> 
>     mismatched packets::
> 
> -    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/Raw('x'*20)
> -    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/SCTP()/Raw('x'*20)
> -    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/SCTP()/Raw('x'*20)
> -    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x1234567)/IP()/Raw('x'*20)
> -
> -Test case: MAC_IPV4_PAY queue index
> -===================================
> +    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/Raw('x'*20)
> +    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/SCTP()/Raw('x'*20)
> +    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IPv6()/SCTP()/Raw('x'*20)
> +    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x1234567)/IP()/Raw('x'*20)
> 
> -1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> queue index 1 / end
> +Test case: flow validation
> +==========================
> 
> -2. send matched packets, check the packets are distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +1. validate MAC_IPV4_PAY with queue index action::
> 
> -3. verify rules can be listed and destroyed::
> +    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
> 
> -    testpmd> flow list 0
> +   get the message::
> 
> -   check the existing rule.
> -   destroy the rule::
> +    Flow rule validated
> 
> -    testpmd> flow destroy 0 rule 0
> +2. repeat step 1 with all patterns in pattern and input set table,
> +   get the same result.
> 
> -   verify matched packets are not distributed to queue 1.
> -   check there is no rule listed.
> +3. repeat step 1-2 with action rss queues/drop/passthru/mark/mark+rss,
> +   get the same result.
> 
> -Test case: MAC_IPV4_PAY selected inputset queue index
> -=====================================================
> +4. validate combined use of actions::
> 
> -1. create filter rules::
> +    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 / end actions queue index 1 / mark / count / end
> +    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 / end actions rss queues 0 1 end / mark id 1 / count identifier
> 0x1234 shared on / end
> +    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 / end actions passthru / mark id 2 / count identifier 0x34 shared
> off / end
> +    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 / end actions mark id 3 / rss / count shared on / end
> +    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 / end actions drop / count shared off / end
> 
> -    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 1 / end
> actions queue index 1 / end
> -    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 17 /
> end actions queue index 2 / end
> +   get the message::
> 
> -2. send matched packets::
> +    Flow rule validated
> 
> -    pkt1 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> proto=1) / Raw('x' * 80)
> -    pkt2 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> frag=1, proto=1) / Raw('x' * 80)
> -    pkt3 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
> -    pkt4 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> frag=1, ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
> -    pkt5 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> proto=17, ttl=2, tos=4)/Raw('x' * 80)
> -    pkt6 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> frag=1, proto=17, ttl=2, tos=4)/Raw('x' * 80)
> +5. check the flow list::
> 
> -   check the pkt1 and pkt2 are redirected to queue 1.
> -   check the pkt3-pkt6 are redirected to queue 2
> -   send mismatched packets::
> +    testpmd> flow list 0
> 
> -    pkt7 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.22",
> proto=1) / Raw('x' * 80)
> -    pkt8 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> proto=6) / Raw('x' * 80)
> -    pkt9 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/T
> CP(sport=22,dport=23)/ Raw('x' * 80)
> -    pkt10 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> frag=1)/TCP(sport=22,dport=23)/ Raw('x' * 80)
> +   there is no rule listed.
> 
> -   check the packets are not distributed to queue 1 or queue 2.
> +Test case: negative validation
> +==============================
> 
> -3. verify rules can be listed and destroyed::
> +1. only count action::
> 
> -    testpmd> flow list 0
> +    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions count / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +   get the error message::
> 
> -    testpmd> flow flush 0
> +    Invalid input action: Invalid argument
> 
> -   verify matched packets are not distributed to expected queue.
> -   check there is no rule listed.
> +2. void action::
> 
> -Test case: MAC_IPV4_UDP queue index
> -===================================
> +    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 proto is 255 ttl is 2 tos is 4 / and actions end
> 
> -1. create filter rules::
> +   get the message::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions queue index 1 / end
> +    Invalid argument
> 
> -2. send matched packets, check the packets is distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +3. conflict action::
> 
> -3. verify rules can be listed and destroyed::
> +    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 2 3 end / rss
> / end
> 
> -    testpmd> flow list 0
> +   get the message::
> 
> -   check the existing rule.
> -   destroy the rule::
> +    Unsupported action combination: Invalid argument
> 
> -    testpmd> flow destroy 0 rule 0
> +4. invalid mark id::
> 
> -   verify matched packet is not distributed to queue 1.
> -   check there is no rule listed.
> +    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions passthru / mark id
> 4294967296 / end
> 
> -Test case: MAC_IPV4_TCP queue index
> -===================================
> +   get the message::
> 
> -1. create filter rules::
> +    Bad arguments
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end
> actions queue index 63 / end
> +5. invalid input set::
> 
> -2. send matched packets, check the packets is distributed to queue 63.
> -   send mismatched packets, check the packets are not distributed to queue
> 63.
> +    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 proto is 255 ttl is 2 tc is 4 / end actions queue index 1 / end
> 
> -3. verify rules can be listed and destroyed::
> +   get the message::
> 
> -    testpmd> flow list 0
> +    Bad arguments
> 
> -   check the existing rule.
> -   destroy the rule::
> +6. invalid queue index::
> 
> -    testpmd> flow destroy 0 rule 0
> +    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> queue index 64 / end
> 
> -   verify matched packet is not distributed to queue 63.
> -   check there is no rule listed.
> +   get the message::
> 
> -Test case: MAC_IPV4_SCTP queue index
> -====================================
> +    Invalid input action: Invalid argument
> 
> -1. create filter rules::
> +7. invalid rss queues parameter
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1
> / end actions queue index 2 / end
> +   Invalid number of queues::
> 
> -2. send matched packets, check the packets is distributed to queue 2.
> -   send mismatched packets, check the packets are not distributed to queue
> 2.
> +    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 1 2 3 end / end
> +    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 0 end / end
> +    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues end / end
> 
> -3. verify rules can be listed and destroyed::
> +   get the message::
> 
> -    testpmd> flow list 0
> +    Invalid input action: Invalid argument
> 
> -   check the existing rule.
> -   destroy the rule::
> +   Discontinuous queues::
> 
> -    testpmd> flow destroy 0 rule 0
> +    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 1 2 3 5 end / end
> 
> -   verify matched packet is not distributed to queue 2.
> -   check there is no rule listed
> +   get the message::
> 
> -Test case: MAC_IPV6_PAY queue index
> -===================================
> +    Discontinuous queue region: Invalid argument
> 
> -1. create filter rules::
> +   invalid rss queues index::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2
> tc is 1 / end actions queue index 1 / end
> +    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 63 64 end / end
> 
> -2. send matched packets, check the packets is distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +   get the message::
> 
> -3. verify rules can be listed and destroyed::
> +    Invalid queue region indexes.: Invalid argument
> 
> -    testpmd> flow list 0
> +8. Invalid value of input set::
> 
> -   check the existing rule.
> -   destroy the rule::
> +    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x100 / end actions queue index 1 / end
> +    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000
> / gtp_psc qfi is 0x5 / end actions queue index 2 / end
> +    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000
> / end actions queue index 1 / end
> 
> -    testpmd> flow destroy 0 rule 0
> +   get the message::
> 
> -   verify matched packet is not distributed to queue 1.
> -   check there is no rule listed.
> +    Bad arguments
> 
> -Test case: MAC_IPV6_PAY selected inputset queue index
> -=====================================================
> +9. unsupported pattern,validate GTPU rule with OS default package::
> 
> -1. create filter rules::
> +    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions drop / end
> 
> -    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 44 / end actions queue
> index 1 / end
> -    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 6 / end actions queue
> index 2 / end
> +   get the message::
> 
> -2. send matched packets::
> +    Bad arguments
> 
> -    pkt1 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020", src="2001::2", nh=44, tc=1, hlim=2)/("X"*480)
> -    pkt2 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020")/IPv6ExtHdrFragment(1000)/("X"*480)
> -    pkt3 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020", nh=44)/TCP(sport=22,dport=23)/("X"*480)
> -    pkt4 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020")/IPv6ExtHdrFragment(1000)/TCP(sport=22,dport=23)/("X"*480)
> -    pkt5 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020", nh=6)/("X"*480)
> -    pkt6 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020")/TCP(sport=22,dport=23)/("X"*480)
> +10. invalid port::
> 
> -   check pkt1-pkt4 are redirected to queue 1.
> -   check pkt5 and pkt6 are redirected to queue 2.
> -   send mismatched packets::
> +    flow validate 2 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
> 
> -    pkt7 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2021", nh=44)/("X"*480)
> -    pkt8 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020")/UDP(sport=22,dport=23)/("X"*480)
> -    pkt9 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020", nh=17)/("X"*480)
> +   get the message::
> 
> -   check the packets are not distributed to queue 1 or queue 2.
> +    No such device: No such device
> 
> -3. verify rules can be listed and destroyed::
> +11. check the flow list::
> 
>      testpmd> flow list 0
> 
> -   check the existing rule.
> -   destroy the rule::
> +   there is no rule listed.
> 
> -    testpmd> flow destroy 0 rule 0
> 
> -   verify matched packet are not distributed to expected queue.
> -   check there is no rule listed.
> +Test case: MAC_IPV4_PAY pattern
> +===============================
> 
> -Test case: MAC_IPV6_UDP queue index
> -===================================
> +Subcase 1: MAC_IPV4_PAY queue index
> +-----------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions queue index 1 / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> queue index 1 / end
> 
> -2. send matched packets, check the packets is distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +2. send matched packets, check the packets are distributed to queue 1
> without FDIR matched ID.
> +   send mismatched packets, check the packets are not distributed to queue
> 1 without FDIR matched ID.
> 
>  3. verify rules can be listed and destroyed::
> 
>      testpmd> flow list 0
> 
> -   check the existing rule.
> +   check the rule listed.
>     destroy the rule::
> 
>      testpmd> flow destroy 0 rule 0
> 
> -   verify matched packet is not distributed to queue 1.
> +4. verify matched packets are not distributed to queue 1 without FDIR
> matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV6_TCP queue index
> -===================================
> +Subcase 2: MAC_IPV4_PAY rss queues
> +----------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp
> src is 22 dst is 23 / end actions queue index 1 / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 2 3 end / end
> 
> -2. send matched packets, check the packets is distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +2. send matched packets, check the packets are distributed to queue 2 or 3
> without without FDIR matched ID.
> +   send mismatched packets, check the packets are not distributed to queue
> 2 or 3 without FDIR matched ID.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify matched packets are not distributed to queue 2 or 3 without FDIR
> matched ID.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 3: MAC_IPV4_PAY passthru
> +--------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify matched packet is not distributed to queue 1.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> passthru / end
> 
> -Test case: MAC_IPV6_SCTP queue index
> -====================================
> +2. send matched packets, check the packets are distributed by RSS without
> FDIR matched ID.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -1. create filter rules::
> +3. repeat step 3 of subcase 1.
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> sctp src is 22 dst is 23 / end actions queue index 1 / end
> +4. verify matched packets are distributed to the same queue without FDIR
> matched ID=0x0.
> +   check there is no rule listed.
> 
> -2. send matched packets, check the packets is distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +Subcase 4: MAC_IPV4_PAY drop
> +----------------------------
> 
> -3. verify rules can be listed and destroyed::
> +1. create filter rules::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions drop
> / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +2. send matched packets, check the packets are dropped
> +   send mismatched packets, check the packets are not dropped.
> 
> -    testpmd> flow destroy 0 rule 0
> +3. repeat step 3 of subcase 1.
> 
> -   verify matched packet is not distributed to queue 1.
> +4. verify matched packets are not dropped.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_IPV4_PAY queue index
> -============================================
> +Subcase 5: MAC_IPV4_PAY mark+rss
> +--------------------------------
> +Note: This combined action is mark with RSS which is without queues
> specified.
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> mark / rss / end
> 
> -2. send matched packets, check the packets are distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x0
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify matched packets are distributed to the same queue without FDIR
> matched ID.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 6: MAC_IPV4_PAY mark
> +----------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify the packets hit rule are not distributed to queue 1.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> mark id 1 / end
> 
> -Test case: MAC_IPV4_TUN_IPV4_UDP queue index
> -============================================
> +2. repeat the steps of passthru with mark part in subcase 3,
> +   get the same result.
> +
> +Subcase 7: MAC_IPV4_PAY protocal
> +--------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue
> index 1 / end
> +    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 1 / end
> actions queue index 1 / mark id 1 / end
> +    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 17 /
> end actions passthru / mark id 3 / end
> 
> -2. send matched packets, check the packets are distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +2. send matched packets::
> 
> -3. verify rules can be listed and destroyed::
> +    pkt1 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> proto=1) / Raw('x' * 80)
> +    pkt2 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> frag=1, proto=1) / Raw('x' * 80)
> +    pkt3 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
> +    pkt4 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> frag=1, ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
> +    pkt5 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> proto=17, ttl=2, tos=4)/Raw('x' * 80)
> +    pkt6 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> frag=1, proto=17, ttl=2, tos=4)/Raw('x' * 80)
> 
> -    testpmd> flow list 0
> +   check the pkt1 and pkt2 are redirected to queue 1 with FDIR matched
> ID=0x1.
> +   check the pkt3-pkt6 are distributed by RSS with FDIR matched ID=0x3.
> +   send mismatched packets::
> 
> -   check the existing rule.
> -   destroy the rule::
> +    pkt7 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.22",
> proto=1) / Raw('x' * 80)
> +    pkt8 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> proto=6) / Raw('x' * 80)
> +    pkt9 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/T
> CP(sport=22,dport=23)/ Raw('x' * 80)
> +    pkt10 =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21",
> frag=1)/TCP(sport=22,dport=23)/ Raw('x' * 80)
> 
> -    testpmd> flow destroy 0 rule 0
> +   check the packets received have not FDIR matched ID.
> 
> -   verify the packets hit rule are not distributed to queue 1.
> +3. repeat step 3 of subcase 1.
> +
> +4. verify matched packets have not FDIR matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_IPV4_TCP queue index
> -============================================
> +
> +Test case: MAC_IPV4_UDP pattern
> +===============================
> +
> +Subcase 1: MAC_IPV4_UDP queue index
> +-----------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue
> index 1 / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions queue index 63 / mark id 0 / end
> 
> -2. send matched packets, check the packets are distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +2. send matched packets, check the packets is distributed to queue 63 with
> FDIR matched ID=0x0.
> +   send mismatched packets, check the packets are received without FDIR
> matched ID.
> 
>  3. verify rules can be listed and destroyed::
> 
>      testpmd> flow list 0
> 
> -   check the existing rule.
> +   check the rule listed.
>     destroy the rule::
> 
>      testpmd> flow destroy 0 rule 0
> 
> -   verify the packets hit rule are not distributed to queue 1.
> +4. verify matched packet is received without FDIR matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_IPV4_SCTP queue index
> -=============================================
> +Subcase 2: MAC_IPV4_UDP rss queues
> +----------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue
> index 1 / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions rss queues 0 1 2 3 end / mark id 4294967294 / end
> 
> -2. send matched packets, check the packets are distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +2. send matched packets, check the packets is distributed to queue 0-3 with
> FDIR matched ID=0xfffffffe.
> +   send mismatched packets, check the packets are received without FDIR
> matched ID.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify matched packet is not received without FDIR matched ID.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 3: MAC_IPV4_UDP passthru
> +--------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rule with mark::
> +
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions passthru / mark id 1 / end
> +
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x1.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -   verify the packets hit rule are not distributed to queue 1.
> +3. repeat step 3 of subcase 1.
> +
> +4. verify matched packets are distributed to the same queue without FDIR
> matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_PAY queue index
> -================================================
> +Subcase 4: MAC_IPV4_UDP drop
> +----------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions drop / end
> 
> -2. send matched packets, check the packets are distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +2. send matched packet, check the packet is dropped.
> +   send mismatched packets, check the packets are not dropped.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify matched packet is dropped.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 5: MAC_IPV4_UDP mark+rss
> +--------------------------------
> +Note: This combined action is mark with RSS which is without queues
> specified.
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> +
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions mark id 2 / rss / end
> +
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x2
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -   verify the packets hit rule are not distributed to queue 1.
> +3. repeat step 3 of subcase 1.
> +
> +4. verify matched packets are distributed to the same queue without FDIR
> matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_UDP queue index
> -================================================
> +Subcase 6: MAC_IPV4_UDP mark
> +----------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue
> index 1 / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions mark id 1 / end
> 
> -2. send matched packets, check the packets are distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +2. repeat the step 2-3 of in subcase 3,
> +   get the same result.
> 
> -3. verify rules can be listed and destroyed::
> +Test case: MAC_IPV4_TCP pattern
> +===============================
> 
> -    testpmd> flow list 0
> +1. replace "udp" with "tcp" in all the subcases of MAC_IPV4_UDP pattern.
> +2. Then repeat all the steps in all the subcases of MAC_IPV4_UDP pattern.
> +3. get the same result.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Test case: MAC_IPV4_SCTP pattern
> +================================
> 
> -    testpmd> flow destroy 0 rule 0
> +1. replace "udp" with "sctp" in all the subcases of MAC_IPV4_UDP pattern.
> +2. Then repeat all the steps in all the subcases of MAC_IPV4_UDP pattern.
> +3. get the same result.
> 
> -   verify the packets hit rule are not distributed to queue 1.
> -   check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_TCP queue index
> -================================================
> +Test case: MAC_IPV6_PAY pattern
> +===============================
> +
> +Subcase 1: MAC_IPV6_PAY queue index
> +-----------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue
> index 1 / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2
> tc is 1 / end actions queue index 1 / mark / end
> 
> -2. send matched packets, check the packets are distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +2. send matched packets, check the packets is distributed to queue 1 with
> FDIR matched ID=0x0.
> +   send mismatched packets, check the packets are received without FDIR
> matched ID.
> 
>  3. verify rules can be listed and destroyed::
> 
>      testpmd> flow list 0
> 
> -   check the existing rule.
> +   check the rule listed.
>     destroy the rule::
> 
>      testpmd> flow destroy 0 rule 0
> 
> -   verify the packets hit rule are not distributed to queue 1.
> +4. verify matched packet is received without FDIR matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP queue index
> -=================================================
> +Subcase 2: MAC_IPV6_PAY rss queues
> +----------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue
> index 1 / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2
> tc is 1 / end \
> +    actions rss queues 56 57 58 59 60 61 62 63 end / mark / end
> 
> -2. send matched packets, check the packets are distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> +2. send matched packets, check the packets is distributed to queue 56-63
> with FDIR matched ID=0x0.
> +   send mismatched packets, check the packets are not distributed to queue
> 56-63 with FDIR matched ID=0x0.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify matched packet is received without FDIR matched ID=0x0.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 3: MAC_IPV6_PAY passthru
> +--------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify the packets hit rule are not distributed to queue 1.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2
> tc is 1 / end actions passthru / mark / end
> 
> -Test case: queue index wrong parameters
> -=======================================
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x0.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -1. invalid parameters::
> +3. repeat step 3 of subcase 1.
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> queue index 64 / end
> +4. verify matched packets are destributed to the same queue without FDIR
> matched ID .
> +   check there is no rule listed.
> 
> -   failed to be created.
> +Subcase 4: MAC_IPV6_PAY drop
> +----------------------------
> 
> -2. same pattern items, different action::
> +1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> queue index 1 / end
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> queue index 2 / end
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions drop
> / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2
> tc is 1 / end actions drop / end
> +
> +2. send matched packets, check the packets are dropped.
> +   send mismatched packets, check the packets are not dropped.
> 
> -   flow 1 can be created successfully,
> -   flow 2 and flow 3 failed to be created cause of confliction.
> +3. repeat step 3 of subcase 1.
> +
> +4. verify matched packet is dropped.
> +   check there is no rule listed.
> 
> -Test case: MAC_IPV4_PAY passthru/count
> -======================================
> +Subcase 5: MAC_IPV6_PAY mark+rss
> +--------------------------------
> +Note: This combined action is mark with RSS which is without queues
> specified.
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> passthru / count / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2
> tc is 1 / end actions mark / rss / end
> 
> -2. send matched packets, check the packets are redirected by RSS
> -   send mismatched packets, check the packets are redirected by RSS
> -   check the count number::
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x0
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -    flow query 0 0 count
> -    count:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 2
> -     bytes: 0
> +3. repeat step 3 of subcase 1.
> 
> -3. verify rules can be listed and destroyed::
> +4. verify matched packets are distributed to the same queue without FDIR
> matched ID.
> +   check there is no rule listed.
> 
> -    testpmd> flow list 0
> +Subcase 6: MAC_IPV6_PAY mark
> +----------------------------
> 
> -   check the existing rule.
> -   destroy the rule::
> +1. create filter rules::
> 
> -    testpmd> flow destroy 0 rule 0
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2
> tc is 1 / end actions mark / end
> 
> -   verify matched packets are redirected to the same queue.
> -   check there is no rule listed.
> +2. repeat the steps of passthru in subcase 3,
> +   get the same result.
> 
> -Test case: MAC_IPV4_PAY passthru/mark
> -=====================================
> +Subcase 7: MAC_IPV6_PAY protocal
> +--------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> passthru / mark / end
> +    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is
> ABAB:910A:2222:5498:8475:1111:3900:1010 proto is 44 / end actions rss
> queues 5 6 end / mark id 1 / end
> +    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 6 / end actions mark id
> 2 / rss / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +2. send matched packets::
> 
> -3. verify rules can be listed and destroyed::
> +    pkt1 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1010", nh=44, tc=1,
> hlim=2)/("X"*480)
> +    pkt2 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020",
> src="ABAB:910A:2222:5498:8475:1111:3900:1010")/IPv6ExtHdrFragment(100
> 0)/("X"*480)
> +    pkt3 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1010",
> nh=44)/TCP(sport=22,dport=23)/("X"*480)
> +    pkt4 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020",
> src="ABAB:910A:2222:5498:8475:1111:3900:1010")/IPv6ExtHdrFragment(100
> 0)/TCP(sport=22,dport=23)/("X"*480)
> +    pkt5 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020", nh=6)/("X"*480)
> +    pkt6 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020")/TCP(sport=22,dport=23)/("X"*480)
> 
> -    testpmd> flow list 0
> +   check pkt1-pkt4 are redirected to queue 5 or queue 6 with FDIR matched
> ID=0x1.
> +   check pkt5 and pkt6 are distributed by RSS with FDIR matched ID=0x2.
> +   send mismatched packets::
> 
> -   check the existing rule.
> -   destroy the rule::
> +    pkt7 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1011",
> nh=44)/("X"*480)
> +    pkt8 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020")/UDP(sport=22,dport=23)/("X"*480)
> +    pkt9 =
> Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3
> 900:2020", nh=17)/("X"*480)
> 
> -    testpmd> flow destroy 0 rule 0
> +   check the packets received have not FDIR matched ID.
> 
> -   verify matched packets are redirected to the same queue without FDIR ID.
> +3. repeat step 3 of subcase 1.
> +
> +4. verify matched packets have not FDIR matched.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_UDP passthru/mark
> -=====================================
> +
> +Test case: MAC_IPV6_UDP pattern
> +===============================
> +
> +Subcase 1: MAC_IPV6_UDP queue index
> +-----------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions passthru / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions queue index 1 / mark / end
> 
> -2. send matched packets, check the packets are redirected by RSS.
> -   send mismatched packets, check the packets are redirected by RSS.
> +2. send matched packets, check the packets is distributed to queue 1 with
> FDIR matched ID=0x0.
> +   send mismatched packets, check the packets are received without FDIR
> matched ID=0x0.
> 
>  3. verify rules can be listed and destroyed::
> 
>      testpmd> flow list 0
> 
> -   check the existing rule.
> +   check the rule listed.
>     destroy the rule::
> 
>      testpmd> flow destroy 0 rule 0
> 
> -   verify matched packet is redirected to the same queue.
> +4. verify matched packet is received without FDIR matched ID=0x0.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TCP passthru/mark
> -=====================================
> +Subcase 2: MAC_IPV6_UDP rss queues
> +----------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end
> actions passthru / mark / end
> +    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions rss / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +2. send matched packets, check the packets is distributed by RSS.
> +   send mismatched packets, check the packets are distributed by RSS too.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify matched packet is destributed to the same queue.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 3: MAC_IPV6_UDP passthru
> +--------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions passthru / mark / end
> 
> -Test case: MAC_IPV4_SCTP passthru/mark
> -======================================
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x0.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -1. create filter rules::
> +3. repeat step 3 of subcase 1.
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1
> / end actions passthru / mark / end
> +4. verify matched packets are destributed to the same queue without FDIR
> matched ID .
> +   check there is no rule listed.
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +Subcase 4: MAC_IPV6_UDP drop
> +----------------------------
> 
> -3. verify rules can be listed and destroyed::
> +1. create filter rules::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions drop / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +2. send matched packets, check the packets are dropped.
> +   send mismatched packets, check the packets are not dropped.
> 
> -    testpmd> flow destroy 0 rule 0
> +3. repeat step 3 of subcase 1.
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> +4. verify matched packet is dropped.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV6_PAY passthru/mark
> -=====================================
> +Subcase 5: MAC_IPV6_UDP mark+rss
> +--------------------------------
> +Note: This combined action is mark with RSS which is without queues
> specified.
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2
> tc is 1 / end actions passthru / mark / end
> +    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions mark / rss / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x0
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify matched packets are distributed to the same queue without FDIR
> matched ID.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 6: MAC_IPV6_UDP mark
> +----------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions mark / end
> 
> -Test case: MAC_IPV6_UDP passthru/mark
> -=====================================
> +2. repeat the steps of passthru in subcase 3,
> +   get the same result.
> 
> -1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions passthru / mark / end
> +Test case: MAC_IPV6_TCP pattern
> +===============================
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +1. replace "udp" with "tcp" in all the subcases of MAC_IPV6_UDP pattern.
> +2. Then repeat all the steps in all the subcases of MAC_IPV6_UDP pattern.
> +3. get the same result.
> 
> -3. verify rules can be listed and destroyed::
> +Test case: MAC_IPV6_SCTP pattern
> +================================
> 
> -    testpmd> flow list 0
> +1. replace "udp" with "sctp" in all the subcases of MAC_IPV6_UDP pattern.
> +2. Then repeat all the steps in all the subcases of MAC_IPV6_UDP pattern.
> +3. get the same result.
> 
> -   check the existing rule.
> -   destroy the rule::
> 
> -    testpmd> flow destroy 0 rule 0
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> 
> -Test case: MAC_IPV6_TCP passthru/mark
> -=====================================
> +Test case: MAC_IPV4_TUN_IPV4_PAY pattern
> +========================================
> +
> +Subcase 1: MAC_IPV4_TUN_IPV4_PAY queue index
> +--------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp
> src is 22 dst is 23 / end actions passthru / mark / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +2. send matched packets, check the packets are distributed to queue 1
> without FDIR matched ID.
> +   send mismatched packets, check the packets are not distributed to queue
> 1 without FDIR matched ID.
> 
>  3. verify rules can be listed and destroyed::
> 
> @@ -1070,106 +1093,92 @@ Test case: MAC_IPV6_TCP passthru/mark
> 
>      testpmd> flow destroy 0 rule 0
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> +   verify the packets hit rule are not distributed to queue 1 without FDIR
> matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV6_SCTP passthru/mark
> -======================================
> +Subcase 2: MAC_IPV4_TUN_IPV4_PAY rss queues
> +-------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> sctp src is 22 dst is 23 / end actions passthru / mark / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 9 10 11 12 13 14 15
> 16 17 18 19 20 21 22 23 24 end / mark / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +2. send matched packets, check the packets are distributed to queue group
> with FDIR matched ID=0x0.
> +   send mismatched packets, check the packets are received without FDIR
> matched ID.
> 
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> +3. repeat step 3 of subcase 1.
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> +4. verify the packets hit rule are received without FDIR matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_IPV4_PAY passthru/mark
> -==============================================
> +Subcase 3: MAC_IPV4_TUN_IPV4_PAY passthru
> +-----------------------------------------
> 
>  1. create filter rules::
> 
>      flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions passthru / mark / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +2. send matched packets, check the packets are redirected by RSS with FDIR
> matched ID=0x0.
> +   send mismatched packets, check the packets are redirected by RSS
> without FDIR matched ID.
> 
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> +3. repeat step 3 of subcase 1.
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> +4. verify the packets hit rule are received without FDIR matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_IPV4_UDP passthru/mark
> -==============================================
> +Subcase 4: MAC_IPV4_TUN_IPV4_PAY drop
> +-------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions
> passthru / mark / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +2. send matched packets, check the packets dropped.
> +   send mismatched packets, check the packets are not dropped.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. check there is no rule listed.
> +   verify the packets hit the rule are not dropped.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 5: MAC_IPV4_TUN_IPV4_PAY mark/rss
> +-----------------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions mark / rss / end
> 
> -Test case: MAC_IPV4_TUN_IPV4_TCP passthru/mark
> -==============================================
> +2. send matched packets, check the packets are redirected by RSS with FDIR
> matched ID=0x0.
> +   send mismatched packets, check the packets are redirected by RSS
> without FDIR matched ID.
> 
> -1. create filter rules::
> +3. repeat step 3 of subcase 1.
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions passthru
> / mark / end
> +4. verify matched packet is redirected to the same queue without FDIR
> matched ID.
> +   check there is no rule listed.
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +Subcase 6: MAC_IPV4_TUN_IPV4_PAY mark
> +-------------------------------------
> 
> -3. verify rules can be listed and destroyed::
> +1. create filter rules::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions mark / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +2. repeat the steps of passthru in subcase 3,
> +   get the same result.
> 
> -    testpmd> flow destroy 0 rule 0
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +Test case: MAC_IPV4_TUN_IPV4_UDP pattern
> +========================================
> 
> -Test case: MAC_IPV4_TUN_IPV4_SCTP passthru/mark
> -===============================================
> +Subcase 1: MAC_IPV4_TUN_IPV4_UDP queue index
> +--------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions
> passthru / mark / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue
> index 1 / mark id 1 / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +2. send matched packets, check the packets are distributed to queue 1 with
> FDIR matched ID=0x1.
> +   send mismatched packets, check the packets are received without FDIR
> matched ID.
> 
>  3. verify rules can be listed and destroyed::
> 
> @@ -1180,106 +1189,106 @@ Test case: MAC_IPV4_TUN_IPV4_SCTP
> passthru/mark
> 
>      testpmd> flow destroy 0 rule 0
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> +4. verify the packets hit rule are received without FDIR matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_PAY passthru/mark
> -==================================================
> +Subcase 2: MAC_IPV4_TUN_IPV4_UDP rss queues
> +-------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions passthru / mark / end
> -
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss
> queues 38 39 40 41 end / mark id 1 / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +2. send matched packets, check the packets are distributed to queue group
> with FDIR matched ID=0x1.
> +   send mismatched packets, check the packets are received without FDIR
> matched ID.
> 
> -    testpmd> flow destroy 0 rule 0
> +3. repeat step 3 of subcase 1.
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> +4. verify the packets hit rule are received without FDIR matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_UDP passthru/mark
> -==================================================
> +Subcase 3: MAC_IPV4_TUN_IPV4_UDP passthru
> +-----------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions
> passthru / mark / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions
> passthru / mark id 1 / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x1.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify the packets hit rule are distributed to the same queue without FDIR
> matched ID.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 4: MAC_IPV4_TUN_IPV4_UDP drop
> +-------------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop /
> end
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_TCP passthru/mark
> -==================================================
> +2. send matched packets, check the packets are dropped.
> +   send mismatched packets, check the packets are received without FDIR
> matched ID.
> 
> -1. create filter rules::
> +3. repeat step 3 of subcase 1.
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions passthru
> / mark / end
> +4. verify the packets hit rule are received without FDIR matched ID.
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +Subcase 5: MAC_IPV4_TUN_IPV4_UDP mark/rss
> +-----------------------------------------
> 
> -3. verify rules can be listed and destroyed::
> +1. create filter rules::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id
> 1 / rss / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x1.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -    testpmd> flow destroy 0 rule 0
> +3. repeat step 3 of subcase 1.
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> +4. verify the packets hit rule are distributed to the same queue without FDIR
> matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP passthru/mark
> -===================================================
> +Subcase 6: MAC_IPV4_TUN_IPV4_UDP mark
> +-------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions
> passthru / mark / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id
> 1 / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> +2. repeat the steps of passthru in subcase 3,
> +   get the same result.
> 
> -3. verify rules can be listed and destroyed::
> 
> -    testpmd> flow list 0
> +Test case: MAC_IPV4_TUN_IPV4_TCP pattern
> +========================================
> 
> -   check the existing rule.
> -   destroy the rule::
> +1. replace "udp" with "tcp" in all the subcases of MAC_IPV4_TUN_IPV4_UDP
> pattern.
> +2. Then repeat all the steps in all the subcases of MAC_IPV4_TUN_IPV4_UDP
> pattern.
> +3. get the same result.
> 
> -    testpmd> flow destroy 0 rule 0
> +Test case: MAC_IPV4_TUN_IPV4_SCTP pattern
> +=========================================
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +1. replace "udp" with "sctp" in all the subcases of
> MAC_IPV4_TUN_IPV4_UDP pattern.
> +2. Then repeat all the steps in all the subcases of MAC_IPV4_TUN_IPV4_UDP
> pattern.
> +3. get the same result.
> 
> -Test case: MAC_IPV4_PAY mark/rss
> -================================
> +
> +Test case: MAC_IPV4_TUN_MAC_IPV4_PAY pattern
> +============================================
> +
> +Subcase 1: MAC_IPV4_TUN_MAC_IPV4_PAY queue index
> +------------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> mark id 1 / rss / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions queue index 0 / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +2. send matched packets, check the packets are distributed to queue 0
> without FDIR matched ID.
> +   send mismatched packets, check the packets are not distributed to queue
> 0 without FDIR matched ID.
> 
>  3. verify rules can be listed and destroyed::
> 
> @@ -1290,84 +1299,91 @@ Test case: MAC_IPV4_PAY mark/rss
> 
>      testpmd> flow destroy 0 rule 0
> 
> -   verify matched packets are redirected to the same queue without FDIR ID.
> +4. verify the packets hit rule are not distributed to queue 0 without FDIR
> matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_UDP mark/rss
> -================================
> +Subcase 2: MAC_IPV4_TUN_MAC_IPV4_PAY rss queues
> +-----------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions mark / rss / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 0 1 end / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 0.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 0.
> +2. send matched packets, check the packets are distributed to queue group
> without FDIR matched ID.
> +   send mismatched packets, check the packets are not distributed to queue
> group without FDIR matched ID.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify the packets hit rule are not distributed to queue group without
> FDIR matched ID.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 3: MAC_IPV4_TUN_MAC_IPV4_PAY passthru
> +---------------------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions passthru / end
> 
> -Test case: MAC_IPV4_TCP mark/rss
> -================================
> +2. send matched packets, check the packets are distributed by RSS without
> FDIR matched ID.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -1. create filter rules::
> +3. repeat step 3 of subcase 1.
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end
> actions mark id 1 / rss / end
> +4. verify the packets hit rule are distributed to same queue without FDIR
> matched ID.
> +   check there is no rule listed.
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +Subcase 4: MAC_IPV4_TUN_MAC_IPV4_PAY drop
> +-----------------------------------------
> 
> -3. verify rules can be listed and destroyed::
> +1. create filter rules::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +2. send matched packets, check the packets are dropped.
> +   send mismatched packets, check the packets are not dropped.
> 
> -    testpmd> flow destroy 0 rule 0
> +3. repeat step 3 of subcase 1.
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> +4. verify the packets hit rule are not dropped.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_SCTP mark/rss
> -=================================
> +Subcase 5: MAC_IPV4_TUN_MAC_IPV4_PAY mark/rss
> +---------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1
> / end actions mark id 1 / rss / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions mark / rss / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x0.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify the packets hit rule are distributed to same queue without FDIR
> matched ID.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 6: MAC_IPV4_TUN_MAC_IPV4_PAY mark
> +-----------------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions mark / end
> 
> -Test case: MAC_IPV6_PAY mark/rss
> -================================
> +2. repeat the steps of passthru in subcase 3,
> +   get the same result.
> +
> +Test case: MAC_IPV4_TUN_MAC_IPV4_UDP pattern
> +============================================
> +
> +Subcase 1: MAC_IPV4_TUN_MAC_IPV4_UDP queue index
> +------------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2
> tc is 1 / end actions mark id 1 / rss / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue
> index 15 / mark id 1 / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +2. send matched packets, check the packets are distributed to queue 15
> with FDIR matched ID=0x1.
> +   send mismatched packets, check the packets are received without FDIR
> matched ID.
> 
>  3. verify rules can be listed and destroyed::
> 
> @@ -1378,106 +1394,106 @@ Test case: MAC_IPV6_PAY mark/rss
> 
>      testpmd> flow destroy 0 rule 0
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> +4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV6_UDP mark/rss
> -================================
> +Subcase 2: MAC_IPV4_TUN_MAC_IPV4_UDP rss queues
> +-----------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions mark id 1 / rss / end
> -
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss
> queues 0 1 2 3 end / mark id 1 / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +2. send matched packets, check the packets are distributed to queue group
> with FDIR matched ID=0x1.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -    testpmd> flow destroy 0 rule 0
> +3. repeat step 3 of subcase 1.
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> +4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV6_TCP mark/rss
> -================================
> +Subcase 3: MAC_IPV4_TUN_MAC_IPV4_UDP passthru
> +---------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp
> src is 22 dst is 23 / end actions mark id 1 / rss / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions
> passthru / mark id 1 / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x1.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 4: MAC_IPV4_TUN_MAC_IPV4_UDP drop
> +-----------------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop /
> mark id 1 / end
> 
> -Test case: MAC_IPV6_SCTP mark/rss
> -=================================
> +2. send matched packets, check the packets are dropped.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -1. create filter rules::
> +3. repeat step 3 of subcase 1.
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> sctp src is 22 dst is 23 / end actions mark id 1 / rss / end
> +4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
> +   check there is no rule listed.
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +Subcase 5: MAC_IPV4_TUN_MAC_IPV4_UDP mark/rss
> +---------------------------------------------
> 
> -3. verify rules can be listed and destroyed::
> +1. create filter rules::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss /
> mark id 1 / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +2. send matched packets, check the packets are distributed by RSS with FDIR
> matched ID=0x1.
> +   send mismatched packets, check the packets are distributed by RSS
> without FDIR matched ID.
> 
> -    testpmd> flow destroy 0 rule 0
> +3. repeat step 3 of subcase 1.
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> +4. verify the packets hit rule are distributed to same queue without FDIR
> matched ID.
>     check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_IPV4_PAY mark/rss
> -=========================================
> +Subcase 6: MAC_IPV4_TUN_MAC_IPV4_UDP mark
> +-----------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions mark / rss / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id
> 1 / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 0.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 0.
> +2. repeat the steps of passthru in subcase 3,
> +   get the same result.
> 
> -3. verify rules can be listed and destroyed::
> 
> -    testpmd> flow list 0
> +Test case: MAC_IPV4_TUN_MAC_IPV4_TCP pattern
> +============================================
> 
> -   check the existing rule.
> -   destroy the rule::
> +1. replace "udp" with "tcp" in all the subcases of
> MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
> +2. Then repeat all the steps in all the subcases of
> MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
> +3. get the same result.
> 
> -    testpmd> flow destroy 0 rule 0
> +Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP pattern
> +=============================================
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +1. replace "udp" with "sctp" in all the subcases of
> MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
> +2. Then repeat all the steps in all the subcases of
> MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
> +3. get the same result.
> 
> -Test case: MAC_IPV4_TUN_IPV4_UDP mark/rss
> -=========================================
> +Test case: MAC_IPV4_GTPU_EH pattern
> +===================================
> +
> +Subcase 1: MAC_IPV4_GTPU_EH queue index
> +---------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id
> 1 / rss / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions queue index 1 / mark id 1 / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +2. send matched packets, check the packets are distributed to queue 1 with
> FDIR matched ID=0x1.
> +   send mismatched packets, check the packets are not distributed to queue
> 1 without FDIR matched ID.
> 
>  3. verify rules can be listed and destroyed::
> 
> @@ -1488,128 +1504,131 @@ Test case: MAC_IPV4_TUN_IPV4_UDP
> mark/rss
> 
>      testpmd> flow destroy 0 rule 0
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +4. verify matched packets are not distributed to queue 1 without FDIR
> matched ID.
> +   Then check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_IPV4_TCP mark/rss
> -=========================================
> +Subcase 2: MAC_IPV4_GTPU_EH queue group
> +---------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions mark id
> 1 / rss / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions rss queues 0 1 2 3 end / mark id 1 / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +2. send matched packets, check the packets are distributed to queue group
> with FDIR matched ID=0x1.
> +   send mismatched packets, check the packets are not distributed to queue
> group without FDIR matched ID.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify matched packets are not distributed to queue group without FDIR
> matched ID.
> +   Then check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 3: MAC_IPV4_GTPU_EH passthru
> +------------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions passthru / mark id 1 / end
> 
> -Test case: MAC_IPV4_TUN_IPV4_SCTP mark/rss
> -==========================================
> +2. send matched packets, check the packets are redirected by RSS with FDIR
> matched ID=0x1.
> +   send mismatched packets, check the packets are redirected by RSS
> without FDIR matched ID.
> 
> -1. create filter rules::
> +3. repeat step 3 of subcase 1.
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions mark id
> 1 / rss / end
> +4. verify matched packets are redirected to the same queue without FDIR ID.
> +   check there is no rule listed.
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +Subcase 4: MAC_IPV4_GTPU_EH drop
> +--------------------------------
> 
> -3. verify rules can be listed and destroyed::
> +1. create filter rules::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions drop / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +2. send matched packets, check the packets are dropped.
> +   send mismatched packets, check the packets are not dropped without
> FDIR matched ID.
> 
> -    testpmd> flow destroy 0 rule 0
> +3. repeat step 3 of subcase 1.
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +4. verify matched packets are not dropped without FDIR matched ID.
> +   Then check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_PAY mark/rss
> -=============================================
> +Subcase 5: MAC_IPV4_GTPU_EH mark/rss
> +------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions mark id 1 / rss / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions mark id 1 / rss / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +2. send matched packets, check the packets are redirected by RSS with FDIR
> matched ID=0x1.
> +   send mismatched packets, check the packets are redirected by RSS
> without FDIR matched ID.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify matched packets are redirected to the same queue without FDIR
> matched ID.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 6: MAC_IPV4_GTPU_EH mark
> +--------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions mark id 1 / end
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_UDP mark/rss
> -=============================================
> +2. repeat the steps of passthru in subcase 3,
> +   get the same result.
> 
> -1. create filter rules::
> +Subcase 7: MAC_IPV4_GTPU_EH QFI queue index / mark
> +--------------------------------------------------
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id
> 1 / rss / end
> +1. create filter rules on port 0::
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 /
> end actions queue index 1 / mark id 3 / end
> 
> -3. verify rules can be listed and destroyed::
> +2. send matched packets, check the packet is redirected to queue 1 with
> FDIR matched ID=0x3::
> 
> -    testpmd> flow list 0
> +    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_P
> DUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/TCP()/Raw('x'*20)
> 
> -   check the existing rule.
> -   destroy the rule::
> +   send mismatched packets, check the packet received has not FDIR::
> 
> -    testpmd> flow destroy 0 rule 0
> +    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_P
> DUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +3. repeat step 3 of subcase 1.
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_TCP mark/rss
> -=============================================
> +4. verify matched packet received has not FDIR.
> +   Then check there is no rule listed.
> 
> -1. create filter rules::
> +Subcase 8: MAC_IPV4_GTPU_EH without QFI rss queues / mark
> +---------------------------------------------------------
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions mark id
> 1 / rss / end
> +1. create filter rules on port 0::
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc / end actions rss queues 2 3 end / mark id 1 / end
> 
> -3. verify rules can be listed and destroyed::
> +2. send matched packets, check the packet is distributed to queue 2 or
> queue 3 with FDIR matched ID=0x3::
> 
> -    testpmd> flow list 0
> +    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP(
> )/Raw('x'*20)
> 
> -   check the existing rule.
> -   destroy the rule::
> +   send mismatched packets, check the packet received has no FDIR::
> 
> -    testpmd> flow destroy 0 rule 0
> +    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP()
> /Raw('x'*20)
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +3. repeat step 3 of subcase 1.
> +
> +4. verify matched packet received has not FDIR.
> +   Then check there is no rule listed.
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP mark/rss
> -==============================================
> +Test case: MAC_IPV4_GTPU pattern
> +================================
> +
> +Subcase 1: MAC_IPV4_GTPU queue index
> +------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions mark id
> 1 / rss / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions queue index 1 / mark / end
> 
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> +2. send matched packets, check the packets are distributed to queue 1 with
> FDIR matched ID=0x0.
> +   send mismatched packets, check the packets are not distributed to queue
> 1 without FDIR matched ID.
> 
>  3. verify rules can be listed and destroyed::
> 
> @@ -1620,1263 +1639,399 @@ Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP
> mark/rss
> 
>      testpmd> flow destroy 0 rule 0
> 
> -   verify matched packet is redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> +4. verify matched packets are not distributed to queue 1 without FDIR
> matched ID.
> +   Then check there is no rule listed.
> 
> -Test case: mark/rss wrong parameters
> -====================================
> +Subcase 2: MAC_IPV4_GTPU queue group
> +------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions rss / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions rss queues 0 1 end / mark / end
> 
> -2. The rule failed to be created, report proper error message.
> +2. send matched packets, check the packets are distributed to queue group
> with FDIR matched ID=0x0.
> +   send mismatched packets, check the packets are not distributed to queue
> group without FDIR matched ID.
> 
> -3. list the flow::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> -
> -   there is no flow listed.
> +4. verify matched packets are not distributed to queue group without FDIR
> matched ID.
> +   Then check there is no rule listed.
> 
> -Test case: MAC_IPV4_PAY drop
> -============================
> +Subcase 3: MAC_IPV4_GTPU passthru
> +---------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions drop
> / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions passthru / mark / end
> 
> -2. send matched packets, check the packets dropped.
> -   send mismatched packets, check the packets are not dropped.
> +2. send matched packets, check the packets are redirected by RSS with FDIR
> matched ID=0x0.
> +   send mismatched packets, check the packets are redirected by RSS
> without FDIR matched ID.
> 
> -3. verify rules can be listed and destroyed::
> +3. repeat step 3 of subcase 1.
> 
> -    testpmd> flow list 0
> +4. verify matched packets are distributed to same queue without FDIR
> matched ID.
> +   Then check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 4: MAC_IPV4_GTPU drop
> +-----------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. create filter rules::
> 
> -   check there is no rule listed.
> -   verify matched packets are not dropped.
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions drop / end
> 
> -Test case: MAC_IPV4_UDP drop
> -============================
> +2. send matched packets, check the packets are dropped.
> +   send mismatched packets, check the packets are not dropped.
> 
> -1. create filter rules::
> +3. repeat step 3 of subcase 1.
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions drop / end
> +4. verify matched packets are not dropped without FDIR matched ID.
> +   Then check there is no rule listed.
> 
> -2. send matched packets, check the packet dropped.
> -   send mismatched packets, check the packets are not dropped.
> +Subcase 5: MAC_IPV4_GTPU mark/rss
> +---------------------------------
> 
> -3. verify rules can be listed and destroyed::
> +1. create filter rules::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions mark / rss / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +2. send matched packets, check the packets are redirected by RSS with FDIR
> matched ID=0x0.
> +   send mismatched packets, check the packets are redirected by RSS
> without FDIR matched ID.
> 
> -    testpmd> flow destroy 0 rule 0
> +3. repeat step 3 of subcase 1.
> 
> -   check there is no rule listed.
> -   verify the packet hit the rule is not dropped.
> +4. verify matched packets are distributed to same queue without FDIR
> matched ID.
> +   Then check there is no rule listed.
> 
> -Test case: MAC_IPV4_TCP drop
> -============================
> +Subcase 6: MAC_IPV4_GTPU mark
> +-----------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end
> actions drop / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions mark / end
> 
> -2. send matched packets, check the packet dropped.
> -   send mismatched packets, check the packets are not dropped.
> +2. repeat the steps of passthru in subcase 3,
> +   get the same result.
> 
> -3. verify rules can be listed and destroyed::
> 
> -    testpmd> flow list 0
> +Test case: negative cases
> +=========================
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 1: invalid parameters of queue index
> +--------------------------------------------
> 
> -    testpmd> flow destroy 0 rule 0
> +1. Invalid parameters::
> 
> -   check there is no rule listed.
> -   verify the packet hit the rule is not dropped.
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> queue index 64 / end
> 
> -Test case: MAC_IPV4_SCTP drop
> -=============================
> +   Failed to create flow, report message::
> 
> -1. create filter rules::
> +    Invalid queue for FDIR.: Invalid argument
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 / end
> actions drop / end
> +2. check there is no rule listed.
> 
> -2. send matched packets, check the packet dropped.
> -   send mismatched packets, check the packets are not dropped.
> +Subcase 2: invalid parameters of rss queues
> +-------------------------------------------
> 
> -3. verify rules can be listed and destroyed::
> +1. Invalid number of queues::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 1 2 3 end / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 0 end / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues end / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +   Failed to create flow, report message::
> 
> -    testpmd> flow destroy 0 rule 0
> +    Invalid input action: Invalid argument
> 
> -   check there is no rule listed.
> -   verify the packet hit the rule is not dropped.
> +2. Discontinuous queues::
> 
> -Test case: MAC_IPV6_PAY drop
> -============================
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 1 2 3 5 end / end
> 
> -1. create filter rules::
> +   Failed to create flow, report message::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2
> tc is 1 \
> -    / end actions drop / end
> +    Discontinuous queue region: Invalid argument
> 
> -2. send matched packets, check the packets dropped.
> -   send mismatched packets, check the packets are not dropped.
> +3. invalid queue index::
> 
> -3. verify rules can be listed and destroyed::
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 63 64 end / end
> 
> -    testpmd> flow list 0
> +   Failed to create flow, report message::
> 
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packet hit the rule is not dropped.
> -
> -Test case: MAC_IPV6_UDP drop
> -============================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions drop / end
> -
> -2. send matched packets, check the packet dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packet hit the rule is not dropped.
> -
> -Test case: MAC_IPV6_TCP drop
> -============================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp
> src is 22 dst is 23 / end actions drop / end
> -
> -2. send matched packets, check the packet dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packet hit the rule is not dropped.
> -
> -Test case: MAC_IPV6_SCTP drop
> -=============================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> sctp src is 22 dst is 23 / end actions drop / end
> -
> -2. send matched packets, check the packet dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packet hit the rule is not dropped.
> -
> -Test case: MAC_IPV4_TUN_IPV4_PAY drop
> -=====================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
> -
> -2. send matched packets, check the packets dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packets hit the rule are not dropped.
> -
> -Test case: MAC_IPV4_TUN_IPV4_UDP drop
> -=====================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop /
> end
> -
> -2. send matched packets, check the packets dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packets hit the rule are not dropped.
> -
> -Test case: MAC_IPV4_TUN_IPV4_TCP drop
> -=====================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions drop /
> end
> -
> -2. send matched packets, check the packets dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packets hit the rule are not dropped.
> -
> -Test case: MAC_IPV4_TUN_IPV4_SCTP drop
> -======================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions drop /
> end
> -
> -2. send matched packets, check the packets dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packets hit the rule are not dropped.
> -
> -Test case: MAC_IPV4_TUN_MAC_IPV4_PAY drop
> -=========================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
> -
> -2. send matched packets, check the packets dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packets hit the rule are not dropped.
> -
> -Test case: MAC_IPV4_TUN_MAC_IPV4_UDP drop
> -=========================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop /
> end
> -
> -2. send matched packets, check the packets dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packets hit the rule are not dropped.
> -
> -Test case: MAC_IPV4_TUN_MAC_IPV4_TCP drop
> -=========================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions drop /
> end
> -
> -2. send matched packets, check the packets dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packets hit the rule are not dropped.
> -
> -Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP drop
> -==========================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions drop /
> end
> -
> -2. send matched packets, check the packets dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   check there is no rule listed.
> -   verify the packets hit the rule are not dropped.
> -
> -Test case: MAC_IPV4_PAY queue group
> -===================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 0 1 end / end
> -
> -2. send matched packets, check the packets are distributed to queue 0 or 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 0 or 1.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify pkt1 and pkt2 are not distributed to queue 0 or 1.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_UDP queue group
> -===================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions rss queues 1 2 3 4 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_TCP queue group
> -===================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end
> actions rss queues 56 57 58 59 60 61 62 63 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_SCTP queue group
> -====================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1
> / end actions rss queues 0 1 2 3 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV6_PAY queue group
> -===================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2
> tc is 1 / end actions rss queues 1 2 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV6_UDP queue group
> -===================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions rss queues 1 2 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV6_TCP queue group
> -===================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp
> src is 22 dst is 23 / end actions rss queues 1 2 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV6_SCTP queue group
> -====================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> sctp src is 22 dst is 23 / end actions rss queues 1 2 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_TUN_IPV4_PAY queue group
> -============================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 9 10 11 12 13 14 15
> 16 17 18 19 20 21 22 23 24 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_TUN_IPV4_UDP queue group
> -============================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss
> queues 38 39 40 41 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_TUN_IPV4_TCP queue group
> -============================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss
> queues 1 2 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_TUN_IPV4_SCTP queue group
> -=============================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions rss
> queues 1 2 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_TUN_MAC_IPV4_PAY queue group
> -================================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 1 2 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_TUN_MAC_IPV4_UDP queue group
> -================================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss
> queues 1 2 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_TUN_MAC_IPV4_TCP queue group
> -================================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss
> queues 1 2 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP queue group
> -=================================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions rss
> queues 1 2 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packets hit rule are not distributed to queue group.
> -   check there is no rule listed.
> -
> -Test case: queue group wrong parameters
> -=======================================
> -
> -1. invalid number of queues::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 0 1 2 end / end
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 0 end / end
> -
> -2. Discontinuous queues::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 1 2 3 5 end / end
> -
> -3. invalid queue index::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss
> queues 63 64 end / end
> -
> -4. "--rxq=32 --txq=32", set queue group 64 queues::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions rss queues 0 1 2
> 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
> 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
> 58 59 60 61 62 63 end / end
> -
> -all the above five rules are failed to created.
> -
> -5. "--rxq=64 --txq=64", set queue group 64 queues,
> -   create the 64 queues flow successfully.
> -   send matched packets, check the packets are distributed to queue 0-63.
> -   send mismatched packets, check the packets are distributed to queue 0-63
> too.
> -
> -Test case: MAC_IPV4_GTPU_EH queue index
> -=======================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions queue index 1 / end
> -
> -2. send matched packets, check the packets are distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are not distributed to queue 1.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV4_GTPU_EH passthru/mark
> -=========================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions passthru / mark / end
> -
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_GTPU_EH mark/rss
> -====================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions mark id 1 / rss / end
> -
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_GTPU_EH drop
> -================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions drop / end
> -
> -2. send matched packets, check the packets are dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are not dropped.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV4_GTPU_EH queue group
> -=======================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions rss queues 0 1 end / end
> -
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are not distributed to queue group.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV4_GTPU queue index
> -====================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions queue index 1 / end
> -
> -2. send matched packets, check the packets are distributed to queue 1.
> -   send mismatched packets, check the packets are not distributed to queue
> 1.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are not distributed to queue 1.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV4_GTPU passthru/mark
> -======================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions passthru / mark / end
> -
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_GTPU mark/rss
> -=================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions mark id 1 / rss / end
> -
> -2. send matched packets, check the packets are redirected by RSS with FDIR
> ID 1.
> -   send mismatched packets, check the packets are redirected by RSS without
> FDIR ID 1.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are redirected to the same queue without FDIR ID.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_GTPU drop
> -=============================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions drop / end
> -
> -2. send matched packets, check the packets are dropped.
> -   send mismatched packets, check the packets are not dropped.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> +    Invalid queue region indexes.: Invalid argument
> 
> -   check the existing rule.
> -   destroy the rule::
> +4. "--rxq=7 --txq=7", set queue group 8 queues::
> 
> -    testpmd> flow destroy 0 rule 0
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions rss queues 0 1 2
> 3 4 5 6 7 end / end
> 
> -   verify matched packets are not dropped.
> -   Then check there is no rule listed.
> +   Failed to create flow, report message::
> 
> -Test case: MAC_IPV4_GTPU queue group
> -====================================
> +    Invalid queue region indexes.: Invalid argument
> 
> -1. create filter rules::
> +5. check there is no rule listed.
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions rss queues 0 1 end / end
> +6. "--rxq=8 --txq=8", set queue group 8 queues,
> +   create the 8 queues flow successfully.
> +   send matched packets, check the packets are distributed to queue 0-7.
> +   send mismatched packets, check the packets are distributed to queue 0-7
> too.
> 
> -2. send matched packets, check the packets are distributed to queue group.
> -   send mismatched packets, check the packets are not distributed to queue
> group.
> +Subcase 3: Invalid parameters of input set
> +------------------------------------------
> 
> -3. verify rules can be listed and destroyed::
> +1. Invalid value of teid and qfi::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x100 / end actions queue index 1 / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 /
> gtp_psc qfi is 0x5 / end actions queue index 2 / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 /
> end actions queue index 1 / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +   Failed to create flow, report message "Bad arguments"
> 
> -    testpmd> flow destroy 0 rule 0
> +2. check there is no rule listed.
> 
> -   verify matched packets are not distributed to queue group.
> -   Then check there is no rule listed.
> +Subcase 4: Invalid parameters of mark ID
> +----------------------------------------
> 
> -Test case: MAC_IPV4_GTPU_EH mark/count/query
> -============================================
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions queue index 2 / mark id 2 / count / end
> -
> -2. send matched packets, check the packets are distributed to queue 2, the
> FDIR=0x2.
> -   send mismatched packets, check the packets are not distributed to queue
> 2, no FDIR.
> -   check the count number::
> -
> -    flow query 0 0 count
> -    count:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 10
> -     bytes: 0
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are not distributed to queue 2, and no FDIR.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV4_GTPU mark/count/query
> -=========================================
> -
> -1. create filter rules on port 1::
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 / end actions queue index 1 / mark id 4294967296 / end
> 
> -    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions rss queues 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
> 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
> 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 end / mark id 100 / count /
> end
> +   Failed to create flow, report message "Bad arguments"
> 
> -2. send matched packets, check the packets are distributed to queue in 0-63,
> the FDIR=0x64::
> +2. check there is no rule listed.
> 
> -    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x35)/IP()/Raw('x'*20)
> -    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/Raw('x'*20)
> +Subcase 5: Duplicated rules
> +---------------------------
> 
> -   send mismatched packets, check the packets have not FDIR::
> +1. Create a FDIR rule::
> 
> -    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x1234567)/IP()/Raw('x'*20)
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 1 /
> end
> 
> -   check the count number::
> +   the rule is created successfully.
> 
> -    flow query 1 0 count
> -    count:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 2
> -     bytes: 0
> +2. Create the same rule again, Failed to create flow, report message::
> 
> -3. verify rules can be listed and destroyed::
> +    Rule already exists!: File exists
> 
> -    testpmd> flow list 1
> +3. check there is only one rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 6: conflicted rules
> +---------------------------
> 
> -    testpmd> flow destroy 1 rule 0
> +1. Create a FDIR rule::
> 
> -   verify matched packets are distributed to queue in 0-63, and no FDIR.
> -   Then check there is no rule listed.
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 1 /
> end
> 
> -Test case: MAC_IPV4_GTPU_EH QFI mark/count/query
> -================================================
> +   the rule is created successfully.
> 
> -1. create filter rules on port 1::
> +2. Create a rule with same input set but different action::
> 
> -    flow create 1 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 /
> end actions drop / mark id 3 / count / end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 2 /
> end
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions drop / end
> 
> -2. send matched packets, check the packets are dropped::
> +   Failed to create the two flows, report message::
> 
> -    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_P
> DUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/TCP()/Raw('x'*20)
> +    Rule already exists!: File exists
> 
> -   send mismatched packets, check the packets are not dropped, no FDIR::
> +3. check there is only one rule listed.
> 
> -    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_P
> DUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
> +Subcase 7: conflicted actions
> +-----------------------------
> 
> -   check the count number::
> +1. Create a rule with two conflicted actions::
> 
> -    flow query 1 0 count
> -    count:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 1
> -     bytes: 0
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 1 /
> rss queues 2 3 end / end
> 
> -3. verify rules can be listed and destroyed::
> +   Failed to create flow, report message::
> 
> -    testpmd> flow list 1
> +    Invalid input action: Invalid argument
> 
> -   check the existing rule.
> -   destroy the rule::
> +2. check there is no rule listed.
> 
> -    testpmd> flow destroy 1 rule 0
> +Subcase 8: void action
> +----------------------
> 
> -   verify matched packets are not dropped, and no FDIR.
> -   Then check there is no rule listed.
> +1. Create a rule with void action::
> 
> -Test case: MAC_IPV4_GTPU_EH without QFI mark/count/query
> -========================================================
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions end
> 
> -1. create filter rules on port 0::
> +   Failed to create flow, report message::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc / end actions queue index 15 / mark id 3 / count / end
> +    Invalid input action: Invalid argument
> 
> -2. send matched packets, check the packets are distributed to queue 15, the
> FDIR=0x3::
> +2. check there is no rule listed.
> 
> -    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP(
> )/Raw('x'*20)
> +Subcase 9: unsupported action
> +-----------------------------
> 
> -   send mismatched packets, check the packets are not distributed to queue
> 15, no FDIR::
> +1. Create a rule with count action only::
> 
> -    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP()
> /Raw('x'*20)
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions count / end
> 
> -   check the count number::
> +   Failed to create flow, report message::
> 
> -    flow query 0 0 count
> -    count:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 1
> -     bytes: 0
> +    Invalid input action: Invalid argument
> 
> -3. verify rules can be listed and destroyed::
> +2. check there is no rule listed.
> 
> -    testpmd> flow list 0
> +Subcase 10: delete a non-existent rule
> +--------------------------------------
> 
> -   check the existing rule.
> -   destroy the rule::
> +1. show the rule list of port 0::
> 
> -    testpmd> flow destroy 0 rule 0
> +    flow list 0
> 
> -   verify matched packets are not distributed to queue 15, and no FDIR.
> -   Then check there is no rule listed.
> +   There is no rule listed.
> 
> -Test case: MAC_IPV4_GTPU_EH multirules
> -======================================
> +2. destroy rule 0 of port 0::
> 
> -1. create filter rules on port 0::
> +    flow destroy 0 rule 0
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions queue index 1 / end
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x35 / end actions queue index 2 / end
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 /
> gtp_psc qfi is 0x35 / end actions queue index 3 / end
> +   There is no error message reported.
> 
> -   the three rules are created successfully.
> -   then create the following rules::
> +3. check there is no rule listed.
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 /
> gtp_psc qfi is 0x35 / end actions queue index 3 / end
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 /
> gtp_psc qfi is 0x35 / end actions queue index 4 / end
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 /
> gtp_psc qfi is 0x75 / end actions queue index 4 / end
> +4. flush rules of port 0::
> 
> -   the three rules are failed to created.
> -   then create the following rule::
> +    flow flush 0
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 /
> gtp_psc qfi is 0x34 / end actions queue index 3 / end
> +   There is no error message reported.
> 
> -   the rule is created successfully.
> +5. check there is no rule listed.
> 
> -2. send matched packets::
> +Subcase 11: unsupported input set field
> +---------------------------------------
> 
> -    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/Raw('x'*20)
> -    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/Raw('x'*20)
> -    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x35)/IP()/Raw('x'*20)
> -    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x35)/IP()/Raw('x'*20)
> +1. Create a IPV4_PAY rule with TC input set::
> 
> -   check the packets, p_gtpu1 to queue 1, p_gtpu2 to queue 3, p_gtpu3 to
> queue 2, p_gtpu4 to queue 3.
> -   send mismatched packets, check the packets are not distributed to queue
> 1-3::
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 tc is 2 / end actions queue index 1 / end
> 
> -    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x36)/IP()/Raw('x'*20)
> +   Failed to create flow, report message::
> 
> -3. verify rules can be listed and destroyed::
> +    Bad arguments
> 
> -    testpmd> flow list 0
> +2. check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Subcase 12: invalid port
> +------------------------
> 
> -    testpmd> flow flush 0
> +1. Create a rule on port 2::
> 
> -   verify matched packets are not distributed to same queue.
> -   Then check there is no rule listed.
> +    flow create 2 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
> 
> -Test case: MAC_IPV4_GTPU_EH two ports
> -=====================================
> +   Failed to create flow, report message::
> 
> -1. create filter rules on two ports::
> +    No such device: No such device
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions queue index 1 / end
> -    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions queue index 1 / end
> +2. check there is no rule listed on port 2::
> 
> -   send matched packets::
> +    testpmd> flow list 2
> +    Invalid port 2
> 
> -    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/Raw('x'*20)
> +Subcase 13: unsupported pattern
> +-------------------------------
> 
> -   send the packet to two ports, both are distributed to queue 1.
> +1. Create a GTPU rule with OS default package::
> 
> -2. create filter rules on two ports::
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions drop / end
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x35 / end actions queue index 2 / end
> -    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x35 / end actions queue index 3 / end
> +   Failed to create flow, report error message.
> 
> -   send matched packets::
> +2. check there is no rule listed.
> 
> -    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x35)/IP()/Raw('x'*20)
> +Subcase 14: conflict patterns
> +-----------------------------
> 
> -   send the packet to two ports, both are distributed to expected queue.
> +Note: MAC_IPV4_UDP packet can match MAC_IPV4_PAY rule if ip address
> can match.
> +so if there is a MAC_IPV4_PAY rule existing,
> +MAC_IPV4_UDP rule will be set to switch rule.
> +set "--log-level=ice,7", then check::
> 
> -3. flush the rules::
> +    ice_flow_create(): Succeeded to create (1) flow -> FDIR
> +    ice_flow_create(): Succeeded to create (2) flow -> switch
> 
> -    flow flush 0
> -    flow flush 1
> +1. set MAC_IPV4_PAY rule firstly::
> 
> -4. create filter rules on two ports::
> +    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions
> queue index 1 / end
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions queue index 1 / end
> -    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions queue index 2 / end
> +   the first flow rule is set to fdir filter, send matched packet::
> 
> -   send matched packets::
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21")/Raw('x' * 80)],iface="enp175s0f0", count=10)
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
> 
> -    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x35)/IP()/Raw('x'*20)
> -    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:00:00:00:01:03")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/Raw('x'*20)
> +   the two packets are both redirected to queue 1.
> +   then create MAC_IPV4_UDP flow, it is set to switch filter::
> 
> -   send the packets to two ports,
> -   p_gtpu2 is not distributed to queue 1 of port 0, it is distributed to queue 2
> of port 1.
> -   p_gtpu3 is distributed to queue 2 of port 1, it is distributed to queue 1 of
> port 0.
> +    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22
> dst is 23 / end actions queue index 2 / end
> 
> -5. verify rules can be listed and destroyed::
> +   send same packets, MAC_IPV4_PAY packet to queue 1, MAC_IPV4_UDP
> packet to queue 2.
> 
> -    testpmd> flow list 0
> -    testpmd> flow list 1
> +2. flush the rules.
> 
> -   check the existing rules.
> -   destroy the rule::
> +3. set MAC_IPV4_UDP rule firstly::
> 
> -    testpmd> flow destroy 0 rule 0
> -    testpmd> flow destroy 1 rule 0
> +    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22
> dst is 23 / end actions queue index 2 / end
> 
> -   verify matched packets are not distributed to expected queue.
> -   Then check there is no rule listed.
> +   the first rule is set to fdir filter, send matched packet::
> 
> -Test case: MAC_IPV4_GTPU_EH wrong parameters
> -============================================
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
> 
> -1. create filter rules on port 0::
> +   the packet is redirected to queue 2.
> +   then create MAC_IPV4_PAY rule, it is set to switch filter::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x100 / end actions queue index 1 / end
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 /
> gtp_psc qfi is 0x5 / end actions queue index 2 / end
> +    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions
> queue index 1 / end
> 
> -   the two flows can not be created successfully, report proper error
> message.
> +   send same packet, it is redirected to queue 1, because the packet match
> switch filter first.
> 
> -2. list the flow::
> 
> -    testpmd> flow list 0
> +Test case: count/query
> +======================
> 
> -   there is no flow listed.
> +Subcase 1: count for 1 rule of 1 port
> +-------------------------------------
> 
> -Test case: MAC_IPV4_GTPU wrong parameters
> -=========================================
> +1. create filter rules::
> 
> -1. create filter rules on port 0::
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> queue index 1 / count / end
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 /
> end actions queue index 1 / end
> +2. send matched packets, check the packets are redirected to queue 1.
> +   send mismatched packets, check the packets are redirected by RSS.
> +   check the count number::
> 
> -   the flow can not be created successfully.
> +    flow query 0 0 count
> +    count:
> +     hits_set: 1
> +     bytes_set: 0
> +     hits: 2
> +     bytes: 0
> 
> -2. list the flow::
> +3. verify rules can be listed and destroyed::
> 
>      testpmd> flow list 0
> 
> -   there is no flow listed.
> +   check the existing rule.
> +   destroy the rule::
> +
> +    testpmd> flow destroy 0 rule 0
> +
> +   verify matched packets are redirected by RSS.
> +   check there is no rule listed.
> +
> +4.  check the count number::
> 
> -Test case: count query identifier share
> -=======================================
> +     testpmd> flow query 0 0 count
> +     Flow rule #0 not found
> +
> +Subcase 2: count query identifier share
> +---------------------------------------
> 
>  1. create filter rules::
> 
>      flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 / end actions
> queue index 1 / count identifier 0x1234 shared on / end
> -    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions
> queue index 2 / count identifier 0x1234 shared on / end
> -    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 / end actions
> queue index 3 / count identifier 0x1234 shared off / end
> -    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.4 / end actions
> queue index 4 / count identifier 0x1234 / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions rss
> queues 2 3 end / count identifier 0x1234 shared on / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 / end actions
> passthru / mark / count identifier 0x1234 shared off / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.4 / end actions
> mark id 1 / rss / count identifier 0x1234 / end
>      flow create 0 ingress pattern eth / ipv4 src is 192.168.0.5 / end actions
> queue index 5 / count shared on / end
>      flow create 0 ingress pattern eth / ipv4 src is 192.168.0.6 / end actions
> drop / count shared on / end
>      flow create 0 ingress pattern eth / ipv4 src is 192.168.0.7 / end actions
> drop / count identifier 0x1235 shared on / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.8 / end actions rss
> / count / end
> 
>  2. send matched packets::
> 
> @@ -2887,10 +2042,15 @@ Test case: count query identifier share
> 
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.5",dst="192.168.0.
> 21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
> 
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.6",dst="192.168.0.
> 21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
> 
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.
> 21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.8",dst="192.168.0.
> 21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
> 
>     check the packets,
> -   packet 1 to queue 1, packet 2 to queue 2, packet 3 to queue 3, packet 4 to
> queue 4, packet 5 to queue 5,
> +   packet 1 to queue 1, packet 2 to queue 2 or queue 3,
> +   packet 3 is distributed by RSS with FDIR matched ID=0x0,
> +   packet 4 is distributed by RSS with FDIR matched ID=0x1,
> +   packet 5 to queue 5,
>     packet 6 dropped, packet 7 dropped.
> +   packet 8 is distributed by RSS.
> 
>  3. query count::
> 
> @@ -2936,6 +2096,12 @@ Test case: count query identifier share
>       bytes_set: 0
>       hits: 10
>       bytes: 0
> +    testpmd> flow query 0 7 count
> +    COUNT:
> +     hits_set: 1
> +     bytes_set: 0
> +     hits: 10
> +     bytes: 0
> 
>  4. verify rules can be listed and destroyed::
> 
> @@ -2946,21 +2112,23 @@ Test case: count query identifier share
> 
>      testpmd> flow flush 0
> 
> -   verify matched packet are not distributed to same queue.
> -   check there is no rule listed.
> +5. check there is no rule listed,
> +   send matched packets, query count, flow rule not found.
> 
> -Test case: multi patterns count query
> -=====================================
> +Subcase 3: multi patterns mark count query
> +------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / tcp src is 22
> dst is 23 / end actions queue index 1 / count / end
> -    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22
> dst is 23 / end actions drop / count / end
> -    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / sctp src is 22
> dst is 23 / end actions rss queues 62 63 end / count / end
> -    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions
> queue index 1 / count / end
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue
> index 3 / count / end
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 / tcp dst is 23 / end actions queue index 4 / count / end
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue
> index 5 / count / end
> +    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / tcp src is 22
> dst is 23 / end actions queue index 1 / mark id 0 / count / end
> +    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22
> dst is 23 / end actions drop / mark id 1 / count / end
> +    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / sctp src is 22
> dst is 23 / end actions rss queues 62 63 end / mark id 2 / count / end
> +    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions
> queue index 1 / mark id 3 / count / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue
> index 3 / mark id 4 / count / end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 / tcp dst is 23 / end actions queue index 4 / count / mark id 5 /
> end
> +    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue
> index 5 / mark id 6 / count / end
> +    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> end actions rss queues 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
> 22 23 24 25 26 27 28 29 30 31 \
> +    32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
> 57 58 59 60 61 62 63 end / mark id 100 / count / end
> 
>  2. send matched packets::
> 
> @@ -2971,10 +2139,12 @@ Test case: multi patterns count query
> 
> sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP(dport=4790)/VXLAN(flags=0
> xc)/IP(dst="192.168.0.21",
> src="192.168.0.20")/UDP(sport=22,dport=23)/("X"*480)], iface="enp175s0f0",
> count=10)
> 
> sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=2)/Ether(dst="
> 00:11:22:33:44:55")/IP(src="192.168.0.20")/TCP(dport=23)/("X"*480)],
> iface="enp175s0f0", count=10)
> 
> sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=2)/Ether()/IP(s
> rc='192.168.0.20', dst='192.168.0.21')/SCTP(sport=22,dport=23)/("X"*480)],
> iface="enp175s0f0", count=10)
> +    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255,
> teid=0x12345678)/IP()/Raw('x'*20)], iface="enp175s0f0", count=10)
> 
>     check the packets,
>     packet 1 to queue 1, packet 2 dropped, packet 3 to queue 62-63, packet 4
> to queue 1, packet 5 to queue 3,
> -   packet 6 to queue 4, packet 7 to queue 5.
> +   packet 6 to queue 4, packet 7 to queue 5, packet 8 is distributed by RSS.
> +   all the packets are received with FDIR matched ID.
> 
>  3. query count::
> 
> @@ -3020,630 +2190,423 @@ Test case: multi patterns count query
>       bytes_set: 0
>       hits: 10
>       bytes: 0
> +    testpmd> flow query 0 7 count
> +    COUNT:
> +     hits_set: 1
> +     bytes_set: 0
> +     hits: 10
> +     bytes: 0
> 
> -4. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   There are 7 rules listed.
> -   destroy the rule 0::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify the packet matching rule 0 is not distributed to queue 1.
> -   check rule 1-6 listed.
> -
> -5. destroy the rule 6::
> -
> -    testpmd> flow destroy 0 rule 6
> -
> -   verify the packet matching rule 6 is not distributed to queue 5.
> -   check rule 1-5 listed.
> -
> -6. destroy the rule 3::
> -
> -    testpmd> flow destroy 0 rule 3
> -
> -   verify the packet matching rule 3 is not distributed to queue 1.
> -   check rule 1/2/4/5 listed.
> -
> -7. flush the all the rules::
> -
> -    testpmd> flow flush 0
> -
> -   verify the matched packets are not distributed to the same queue.
> -   check no rule listed.
> -
> -Test case: two ports multi patterns count query
> -===============================================
> -
> -1. create filter rules::
> -
> -    flow create 1 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 255  tos
> is 4 / end actions queue index 1 / count / end
> -    flow create 1 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> sctp src is 22 dst is 23 / end actions rss queues 6 7 end / count / end
> -    flow create 1 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions rss queues 6 7 end / count / end
> -    flow create 1 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp
> src is 22 dst is 23 / end actions queue index 2 / count / end
> -    flow create 1 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions drop / count / end
> -    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 tos is 4 / tcp src
> is 22 dst is 23 / end actions drop / count / end
> -    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions
> queue index 1 / count / end
> -
> -2. send matched packets::
> -
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21", proto=255, ttl=2, tos=4) / Raw('x' * 80)],iface="enp175s0f1", count=10)
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:847
> 5:1111:3900:2020", src="2001::2", tc=1,
> hlim=2)/SCTP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:847
> 5:1111:3900:2020", src="2001::2", tc=1,
> hlim=2)/UDP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:847
> 5:1111:3900:2020", src="2001::2", tc=1,
> hlim=2)/TCP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN()/Ether()/IP(src='1
> 92.168.0.20', dst='192.168.0.21')/("X"*480)], iface="enp175s0f1", count=10)
> -    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2,
> tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f0",
> count=10)
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:847
> 5:1111:3900:2020", src="2001::2", nh=0, tc=1, hlim=2)/("X"*480)],
> iface="enp175s0f0", count=10)
> -    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2,
> tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f1",
> count=10)
> -
> -   check the packets,
> -   packet 1 to queue 1 of port 1, packet 2 to queue 6-7 of port 1, packet 3 to
> queue 6-7 of port 1,
> -   packet 4 to queue 2 of port 1, packet 5 dropped of port 1,
> -   packet 6 to dropped of port 0, packet 7 to queue 1 of port 0.
> -   packet 8 received by port 1.
> -
> -3. query count::
> -
> -    testpmd> flow query 1 0 count
> -    COUNT:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 10
> -     bytes: 0
> -    testpmd> flow query 1 1 count
> -    COUNT:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 10
> -     bytes: 0
> -    testpmd> flow query 1 2 count
> -    COUNT:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 10
> -    testpmd> flow query 1 3 count
> -    COUNT:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 10
> -     bytes: 0
> -    testpmd> flow query 1 4 count
> -    COUNT:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 10
> -     bytes: 0
> -    testpmd> flow query 0 0 count
> -    COUNT:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 10
> -    testpmd> flow query 0 1 count
> -    COUNT:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 10
> -
> -4. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -    testpmd> flow list 1
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow flush 0
> -    testpmd> flow flush 1
> -
> -   verify matched packet are not distributed to same queue.
> -   check there is no rule listed::
> -
> -    testpmd> flow list 0
> -    testpmd> flow list 1
> -
> -Test case: max count
> -====================
> -
> -1. create 257 flows with count::
> -
> -    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 / end actions
> drop / count / end
> -    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions
> drop / count / end
> -    ……
> -    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 / end actions
> drop / count / end
> -    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.2 / end actions
> drop / count / end
> -
> -   the last one failed to create.
> -
> -2. send matched packets::
> -
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1",dst="192.168.0.
> 21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
> -
> -   check the packet dropped.
> -
> -3. query count::
> -
> -    testpmd> flow query 0 255 count
> -    COUNT:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 10
> -     bytes: 0
> -
> -4. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow flush 0
> -
> -   verify matched packet are not dropped.
> -   check there is no rule listed.
> -
> -Test case: MAC_IPV4_PAY queue index mark
> -========================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions
> queue index 1 / mark id 0 / end
> -
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0x0" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV4_UDP queue index mark
> -========================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions queue index 0 / mark id 1 / end
> -
> -2. send 1 matched packet, check the packets are distributed to queue 0 with
> "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 0 without "FDIR matched" printed.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV4_TCP queue index mark
> -========================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end
> actions queue index 1 / mark id 4294967294 / end
> -
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0xfffffffe" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> -
> -3. verify rules can be listed and destroyed::
> +4. verify rules can be listed and destroyed::
> 
>      testpmd> flow list 0
> 
>     check the existing rule.
>     destroy the rule::
> 
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV4_SCTP drop mark
> -==================================
> -
> -1. create filter rules::
> +    testpmd> flow flush 0
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1
> / end actions drop / mark id 1 / end
> +5. check there is no rule listed,
> +   send matched packets, query count, flow rule not found.
> 
> -2. send 1 matched packet, check the packets are dropped.
> -   send 1 mismatched packet, check the packets are not dropped without
> "FDIR matched" printed.
> +Subcase 4: max count number
> +---------------------------
> 
> -3. verify rules can be listed and destroyed::
> +1. create 257 flows with count::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 / end actions
> drop / count / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions
> drop / count / end
> +    ……
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.255 / end actions
> drop / count / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 / end actions
> drop / count / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.2 / end actions
> drop / count / end
> 
> -   check the existing rule.
> -   destroy the rule::
> +   the last one failed to create, report the error message::
> 
> -    testpmd> flow destroy 0 rule 0
> +    No free counter found
> 
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> +2. send matched packets::
> 
> -Test case: MAC_IPV6_PAY queue index mark
> -========================================
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1",dst="192.168.0.
> 21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
> 
> -1. create filter rules::
> +   check the packet dropped.
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2
> tc is 1 / end actions queue index 1 / mark id 1 / end
> +3. query count::
> 
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> +    testpmd> flow query 0 255 count
> +    COUNT:
> +     hits_set: 1
> +     bytes_set: 0
> +     hits: 10
> +     bytes: 0
> 
> -3. verify rules can be listed and destroyed::
> +4. verify rules can be listed and destroyed::
> 
>      testpmd> flow list 0
> 
> -   check the existing rule.
> +   check that 256 rules listed.
>     destroy the rule::
> 
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV6_UDP queue index mark
> -========================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
> -
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> -
> -3. verify rules can be listed and destroyed::
> +    testpmd> flow flush 0
> 
> -    testpmd> flow list 0
> +   verify matched packet are not dropped.
> +   check there is no rule listed.
> 
> -   check the existing rule.
> -   destroy the rule::
> +Test case: two ports
> +====================
> 
> -    testpmd> flow destroy 0 rule 0
> +Subcase 1: same rule on two ports
> +---------------------------------
> 
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> +1. create filter rules on two ports::
> 
> -Test case: MAC_IPV6_TCP queue index mark
> -========================================
> +    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions queue index 1 / mark / end
> +    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 /
> gtp_psc qfi is 0x34 / end actions queue index 1 / mark / end
> 
> -1. create filter rules::
> +   send matched packets::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp
> src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
> +    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca",
> dst="00:11:22:33:44:55")/IP(src="192.168.0.20",
> dst="192.168.0.21")/UDP(dport=2152) \
> +    /GTP_U_Header(gtp_type=255,
> teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0,
> qos_flow=0x34)/IP()/Raw('x'*20)
> 
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> +   send the packet to two ports, both are distributed to queue 1 with FDIR
> matched ID=0x0.
> 
> -3. verify rules can be listed and destroyed::
> +2. list the rules on two ports::
> 
>      testpmd> flow list 0
> +    ID      Group   Prio    Attr    Rule
> +    0       0       0       i--     ETH IPV4 UDP GTPU GTP_PSC => QUEUE MARK
> +    testpmd> flow list 1
> +    ID      Group   Prio    Attr    Rule
> +    0       0       0       i--     ETH IPV4 UDP GTPU GTP_PSC => QUEUE MARK
> 
> -   check the existing rule.
> -   destroy the rule::
> +3. destroy rule 0 on port 0::
> 
>      testpmd> flow destroy 0 rule 0
> +    Flow rule #0 destroyed
> 
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV6_SCTP queue index mark
> -=========================================
> -
> -1. create filter rules::
> -
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> sctp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
> -
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> -
> -3. verify rules can be listed and destroyed::
> +   list the rules on two ports::
> 
>      testpmd> flow list 0
> +    testpmd> flow list 1
> +    ID      Group   Prio    Attr    Rule
> +    0       0       0       i--     ETH IPV4 UDP GTPU GTP_PSC => QUEUE MARK
> 
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV4_TUN_IPV4_PAY queue index mark
> -=================================================
> -
> -1. create filter rules::
> +4. send the matched packet to port 0, it is redirected by RSS without FDIR
> matched ID.
> +   send the matched packet to port 1, it is still redirected to queue 1 with
> FDIR matched ID=0x0.
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark id 1 /
> end
> +5. destroy rule 0 on port 1::
> 
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> +    testpmd> flow destroy 1 rule 0
> +    Flow rule #0 destroyed
> 
> -3. verify rules can be listed and destroyed::
> +   list the rules on two ports::
> 
>      testpmd> flow list 0
> +    testpmd> flow list 1
> 
> -   check the existing rule.
> -   destroy the rule::
> +   there is no rule listed on both ports.
> +   send the matched packet to port 0/1, it is redirected by RSS without FDIR
> matched ID.
> 
> -    testpmd> flow destroy 0 rule 0
> +Subcase 2: same input set, different actions on two ports
> +---------------------------------------------------------
> 
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> +1. create filter rules on two ports::
> 
> -Test case: MAC_IPV4_TUN_IPV4_UDP queue group mark
> -=================================================
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 1 /
> end
> +    flow create 1 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 2 3 end / mark
> id 1 / end
> 
> -1. create filter rules::
> +   send matched packets to two ports::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss
> queues 1 2 end / mark id 1 / end
> +    pkt =
> Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/T
> CP(sport=22,dport=23)/Raw('x' * 80)
> 
> -2. send 1 matched packet, check the packets are distributed to queue 1-2
> with "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1-2 without "FDIR matched" printed.
> +   the packet sent to port 0 is redirected to queue 1 with FDIR matched
> ID=0x1,
> +   the packet sent to port 1 is redirected to queue 2 or queue 3 with FDIR
> matched ID=0x1.
> 
> -3. verify rules can be listed and destroyed::
> +2. destroy rule 0 on both ports::
> 
> -    testpmd> flow list 0
> +    testpmd> flow flush 0
> +    testpmd> flow flush 1
> 
> -   check the existing rule.
> -   destroy the rule::
> +   list the rules on two ports::
> 
> -    testpmd> flow destroy 0 rule 0
> +    testpmd> flow list 0
> +    testpmd> flow list 1
> 
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> +   there is no rule listed on both ports.
> +   send the matched packet to port 0/1, it is redirected by RSS without FDIR
> matched ID.
> 
> -Test case: MAC_IPV4_TUN_IPV4_TCP drop mark
> -==========================================
> +Subcase 3: two ports multi patterns count query
> +-----------------------------------------------
> 
>  1. create filter rules::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions drop /
> mark id 1 / end
> -
> -2. send 1 matched packet, check the packets are dropped.
> -   send 1 mismatched packet, check the packets are not dropped without
> "FDIR matched" printed.
> -
> -3. verify rules can be listed and destroyed::
> -
> -    testpmd> flow list 0
> -
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> +    flow create 1 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 255
> tos is 4 / end actions queue index 1 / mark id 1 / count identifier 0x1234
> shared on / end
> +    flow create 1 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> sctp src is 22 dst is 23 / end actions rss queues 6 7 end / mark id 2 / count
> identifier 0x1234 shared on / end
> +    flow create 1 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /
> udp src is 22 dst is 23 / end actions rss queues 6 7 end / mark id 1 / count /
> end
> +    flow create 1 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp
> src is 22 dst is 23 / end actions queue index 2 / mark / count / end
> +    flow create 1 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions drop / count / end
> +    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 tos is 4 / tcp src
> is 22 dst is 23 / end actions drop / count / end
> +    flow create 0 ingress pattern eth / ipv6 dst is
> CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions
> queue index 1 / mark id 1 / count identifier 0x1234 shared on / end
> 
> -   verify matched packets are dropped without "FDIR matched" printed.
> -   Then check there is no rule listed.
> +2. send matched packets::
> 
> -Test case: MAC_IPV4_TUN_IPV4_SCTP queue index mark
> -==================================================
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21", proto=255, ttl=2, tos=4) / Raw('x' * 80)],iface="enp175s0f1", count=10)
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:847
> 5:1111:3900:2020", src="2001::2", tc=1,
> hlim=2)/SCTP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:847
> 5:1111:3900:2020", src="2001::2", tc=1,
> hlim=2)/UDP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:847
> 5:1111:3900:2020", src="2001::2", tc=1,
> hlim=2)/TCP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN()/Ether()/IP(src='1
> 92.168.0.20', dst='192.168.0.21')/("X"*480)], iface="enp175s0f1", count=10)
> +    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2,
> tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f0",
> count=10)
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:847
> 5:1111:3900:2020", src="2001::2", nh=0, tc=1, hlim=2)/("X"*480)],
> iface="enp175s0f0", count=10)
> +    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2,
> tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f1",
> count=10)
> 
> -1. create filter rules::
> +   check the packets,
> +   packet 1 to queue 1 of port 1, packet 2 to queue 6-7 of port 1, packet 3 to
> queue 6-7 of port 1,
> +   packet 4 to queue 2 of port 1, packet 5 dropped of port 1,
> +   packet 6 to dropped of port 0, packet 7 to queue 1 of port 0.
> +   packet 8 received by port 1.
> +   all the received packets have specified FDIR matched ID.
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue
> index 1 / mark id 1 / end
> +3. query count::
> 
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> +    testpmd> flow query 1 0 count
> +    COUNT:
> +     hits_set: 1
> +     bytes_set: 0
> +     hits: 20
> +     bytes: 0
> +    testpmd> flow query 1 1 count
> +    COUNT:
> +     hits_set: 1
> +     bytes_set: 0
> +     hits: 20
> +     bytes: 0
> +    testpmd> flow query 1 2 count
> +    COUNT:
> +     hits_set: 1
> +     bytes_set: 0
> +     hits: 10
> +    testpmd> flow query 1 3 count
> +    COUNT:
> +     hits_set: 1
> +     bytes_set: 0
> +     hits: 10
> +     bytes: 0
> +    testpmd> flow query 1 4 count
> +    COUNT:
> +     hits_set: 1
> +     bytes_set: 0
> +     hits: 10
> +     bytes: 0
> +    testpmd> flow query 0 0 count
> +    COUNT:
> +     hits_set: 1
> +     bytes_set: 0
> +     hits: 10
> +    testpmd> flow query 0 1 count
> +    COUNT:
> +     hits_set: 1
> +     bytes_set: 0
> +     hits: 10
> 
> -3. verify rules can be listed and destroyed::
> +4. verify rules can be listed correctly::
> 
>      testpmd> flow list 0
> +    testpmd> flow list 1
> 
> -   check the existing rule.
> -   destroy the rule::
> +5. destroy the rule::
> 
> -    testpmd> flow destroy 0 rule 0
> +    testpmd> flow flush 0
> +    testpmd> flow flush 1
> 
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> +   verify matched packet are received without FDIR matched ID.
> +   check there is no rule listed::
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_PAY queue index mark
> -=====================================================
> +    testpmd> flow list 0
> +    testpmd> flow list 1
> 
> -1. create filter rules::
> +   query the count number, all reported::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark id 1 /
> end
> +    Flow rule #[ID] not found
> 
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> +Test case: Stress test
> +======================
> 
> -3. verify rules can be listed and destroyed::
> +Subcase 1: port stop/port start/port reset
> +------------------------------------------
> 
> -    testpmd> flow list 0
> +1. create a rule::
> 
> -   check the existing rule.
> -   destroy the rule::
> +    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark / end
> 
> -    testpmd> flow destroy 0 rule 0
> +2. list the rule and send matched packet::
> 
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21") / Raw('x' * 80)],iface="enp175s0f0")
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_UDP queue index mark
> -=====================================================
> +   check the packet are redirected to queue 1 with FDIR matched ID=0x0
> 
> -1. create filter rules::
> +3. stop the port, then start the port::
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue
> index 1 / mark id 1 / end
> +    testpmd> port stop 0
> +    testpmd> port start 0
> 
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> +4. show the rule list, the rule is still there.
> 
> -3. verify rules can be listed and destroyed::
> +5. verify matched packet can be still redirected to queue 1 with FDIR
> matched ID=0x0.
> 
> -    testpmd> flow list 0
> +6. reset pf::
> 
> -   check the existing rule.
> -   destroy the rule::
> +    testpmd> port stop 0
> +    testpmd> port reset 0
> +    testpmd> port start 0
> 
> -    testpmd> flow destroy 0 rule 0
> +7. show the rule list, the rule is still there.
> 
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> +8. verify matched packet can be still redirected to queue 1 with FDIR
> matched ID=0x0.
> 
> +Subcase 2: add/delete rules
> +---------------------------
> 
> -Test case: MAC_IPV4_TUN_MAC_IPV4_TCP queue index mark
> -=====================================================
> +1. create two rules::
> 
> -1. create filter rules::
> +    flow create 0 ingress pattern eth / ipv4 proto is 255 / end actions queue
> index 1 / mark / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is
> 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 2 3 end / mark
> id 1 / end
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue
> index 1 / mark id 1 / end
> +   return the message::
> 
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> +    Flow rule #0 created
> +    Flow rule #1 created
> 
> -3. verify rules can be listed and destroyed::
> +   list the rules::
> 
>      testpmd> flow list 0
> +    ID      Group   Prio    Attr    Rule
> +    0       0       0       i--     ETH IPV4 => QUEUE MARK
> +    1       0       0       i--     ETH IPV4 TCP => RSS MARK
> 
> -   check the existing rule.
> -   destroy the rule::
> -
> -    testpmd> flow destroy 0 rule 0
> -
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> -
> -Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP queue index mark
> -======================================================
> +2. delete the rules::
> 
> -1. create filter rules::
> +    testpmd> flow flush 0
> 
> -    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue
> index 1 / mark id 1 / end
> +3. repeate the create and delete operations in step1-2 15360 times.
> 
> -2. send 1 matched packet, check the packets are distributed to queue 1 with
> "FDIR matched ID=0x1" printed.
> -   send 1 mismatched packet, check the packets are not distributed to queue
> 1 without "FDIR matched" printed.
> +4. create the two rules one more time, check the rules listed.
> 
> -3. verify rules can be listed and destroyed::
> +5. send matched packet::
> 
> -    testpmd> flow list 0
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21", proto=255)/Raw('x' * 80)],iface="enp175s0f0")
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21")/TCP(sport=22,dport=23)/Raw('x' * 80)],iface="enp175s0f0")
> 
> -   check the existing rule.
> -   destroy the rule::
> +   check packet 1 is redirected to queue 1 with FDIR matched ID=0x0
> +   check packet 2 is redirected to queue 2 or queue 3 with FDIR matched
> ID=0x1
> 
> -    testpmd> flow destroy 0 rule 0
> +Subcase 3: delete rules
> +-----------------------
> 
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed.
> +1. create 3 rules and destory the first rule::
> 
> -Test case: multirules mark
> -==========================
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0
> tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 / mark / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0
> tos is 4 / tcp src is 22 dst is 24 / end actions queue index 2 / mark / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0
> tos is 4 / tcp src is 22 dst is 25 / end actions queue index 3 / mark / end
> 
> -1. create filter rules::
> +   there are rule 0/1/2 listed::
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end
> actions queue index 1 / mark id 1 / end
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end
> actions queue index 2 / mark id 1 / end
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 / end
> actions queue index 1 / mark id 2 / count / end
> +    flow list 0
> 
> -2. send matched packet::
> +   send packets match rule 0, rule 1 and rule 2,
> +   Verify all packets can be redirected to expected queue and mark.
> +   destory the first rule::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21", ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' *
> 80)],iface="enp175s0f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21", ttl=2, tos=4) /TCP(sport=22,dport=23)/Raw('x' *
> 80)],iface="enp175s0f0")
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21", ttl=2, tos=4) /SCTP(sport=22,dport=23)/Raw('x' *
> 80)],iface="enp175s0f0")
> +    flow destroy 0 rule 0
> 
> -   check packet 1 to queue 1 with "FDIR matched ID=0x1" printed.
> -   packet 2 to queue 2 with "FDIR matched ID=0x1" printed.
> -   packet 3 to queue 1 with "FDIR matched ID=0x2" printed.
> +   list the rules, verify there are only rule 1 and rule 2 listed.
> +   send packet matched rule 0, verify it is received without FDIR matched ID.
> +   send packets matched rule 1 and rule 2, Verify all packets be redirected
> and mark.
> +   flush rules::
> 
> -3. query count::
> +    flow flush 0
> 
> -    testpmd> flow query 0 2 count
> -    COUNT:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 1
> -     bytes: 0
> +   send packets match rule 0, rule 1 and rule 2, verify all packets can not
> mark.
> 
> -4. verify rules can be listed and destroyed::
> +2. create 3 rules and destory the second rule::
> 
> -    testpmd> flow list 0
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0
> tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 / mark / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0
> tos is 4 / tcp src is 22 dst is 24 / end actions queue index 2 / mark / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0
> tos is 4 / tcp src is 22 dst is 25 / end actions queue index 3 / mark / end
> 
> -   check 3 rules listed.
> -   destroy the rule 0::
> +   there are rule 0/1/2 listed::
> 
> -    testpmd> flow destroy 0 rule 0
> +    flow list 0
> 
> -   verify packet 1 is distributed to different queue without "FDIR matched"
> printed.
> -   Then check there is 2 rules listed.
> -   packet 2 to queue 2 with "FDIR matched ID=0x1" printed.
> -   packet 3 to queue 1 with "FDIR matched ID=0x2" printed.
> -   query count::
> +   send packets match rule 0, rule 1 and rule 2,
> +   Verify all packets can be redirected to expected queue and mark.
> +   destory the second rule::
> 
> -    testpmd> flow query 0 2 count
> -    COUNT:
> -     hits_set: 1
> -     bytes_set: 0
> -     hits: 2
> -     bytes: 0
> +    flow destroy 0 rule 1
> 
> +   list the rules, verify there are only rule 0 and rule 2 listed.
> +   send packet matched rule 1, verify it is received without FDIR matched ID.
> +   send packets matched rule 0 and rule 2, Verify all packets be redirected
> and mark.
>     flush rules::
> 
> -    testpmd> flow flush 0
> +    flow flush 0
> 
> -   verify matched packets are distributed to different queue without "FDIR
> matched" printed.
> -   Then check there is no rule listed, and no count exist.
> +   send packets match rule 0, rule 1 and rule 2, verify all packets can not
> mark.
> 
> -Test case: mark wrong parameters
> -================================
> +3. create 3 rules and destory the third rule::
> 
> -1. create filter rules::
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0
> tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 / mark / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0
> tos is 4 / tcp src is 22 dst is 24 / end actions queue index 2 / mark / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0
> tos is 4 / tcp src is 22 dst is 25 / end actions queue index 3 / mark / end
> 
> -    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is
> 192.168.0.20 / end actions queue index 1 / mark id 4294967296 / end
> +   there are rule 0/1/2 listed::
> 
> -   the flow failed to be created.
> +    flow list 0
> 
> -2. list the flow::
> +   send packets match rule 0, rule 1 and rule 2,
> +   Verify all packets can be redirected to expected queue and mark.
> +   destory the last rule::
> 
> -    testpmd> flow list 0
> +    flow destroy 0 rule 2
> 
> -   Then check there is no rule listed.
> +   list the rules, verify there are only rule 0 and rule 1 listed.
> +   send packet matched rule 2, verify it is received without FDIR matched ID.
> +   send packets matched rule 0 and rule 1, Verify all packets be redirected
> and mark.
> +   flush rules::
> 
> -Test case: pattern conflict flow
> -================================
> +    flow flush 0
> 
> -MAC_IPV4_PAY and MAC_IPV4_UDP are conflict patterns.
> -so if create one, then create the other one, the second flow will be
> -set to switch filer.
> -IPV4_UDP packet can match MAC_IPV4_PAY rule.
> -but IPV4_PAY packet cannot match MAC_IPV4_UDP rule.
> +   send packets match rule 0, rule 1 and rule 2, verify all packets can not
> mark.
> 
> -1. set MAC_IPV4_PAY firstly::
> +Subcase 4: max rules
> +--------------------
> 
> -    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions
> queue index 1 / end
> +1. create 15360 rules on port 0::
> 
> -   the first flow is set to fdir filter, send matched packet::
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is
> 192.168.0.0 / end actions queue index 1 / mark / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is
> 192.168.0.1 / end actions queue index 1 / mark / end
> +    ......
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is
> 192.168.59.255 / end actions queue index 1 / mark / end
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21")/Raw('x' * 80)],iface="enp175s0f0", count=10)
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
> +   all the rules are created successfully.
> 
> -   the two type packets both to queue 1.
> -   then create MAC_IPV4_UDP flow, it is set to switch filer::
> +2. create one more rule::
> 
> -    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22
> dst is 23 / end actions queue index 2 / end
> +    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is
> 192.168.60.0 / end actions queue index 1 / mark / end
> 
> -   send same packets, IPV4_PAY packet to queue 1, IPV4_UDP packet to
> queue 2.
> +   the rule failed to create. return the error message::
> 
> -2. set MAC_IPV4_UDP firstly::
> +    Failed to create flow
> 
> -    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22
> dst is 23 / end actions queue index 2 / end
> +3. check the rule list, there are 15360 rules listed.
> 
> -   send matched packet::
> +4. send matched packets for rule 0 and rule 15359::
> 
> -
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0
> .21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.100.20",dst="192.168
> .0.0")/Raw('x' * 80)],iface="enp175s0f0")
> +
> sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.100.20",dst="192.168
> .59.255")/Raw('x' * 80)],iface="enp175s0f0")
> 
> -   packet to queue 2.
> -   then create MAC_IPV4_PAY flow::
> +   check all packets are redirected to expected queue with FDIR matched
> ID=0x0
> 
> -    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions
> queue index 1 / end
> +5. flush all the rules, check the rule list,
> +   there is no rule listed.
> 
> -   send same packet, packet to queue 1, because the packet match switch
> filter first.
> +6. verify matched packets for rule 0 and rule 15359 received without FDIR
> matched ID.
> --
> 2.7.4


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

* [dts] [PATCH v2]test_plans: rework case struction
@ 2020-04-01  7:51 Peng Yuan
  2020-04-01  5:54 ` Tu, Lijuan
  0 siblings, 1 reply; 2+ messages in thread
From: Peng Yuan @ 2020-04-01  7:51 UTC (permalink / raw)
  To: dts; +Cc: Peng Yuan

1/ rework the case stucture.
2/ add stress cases.
3/ add validate cases.

Signed-off-by: Peng Yuan <yuan.peng@intel.com>
---
 test_plans/cvl_fdir_test_plan.rst | 3425 +++++++++++++------------------------
 1 file changed, 1194 insertions(+), 2231 deletions(-)

diff --git a/test_plans/cvl_fdir_test_plan.rst b/test_plans/cvl_fdir_test_plan.rst
index fe8cac5..08e8f21 100644
--- a/test_plans/cvl_fdir_test_plan.rst
+++ b/test_plans/cvl_fdir_test_plan.rst
@@ -83,13 +83,14 @@ Pattern and input set
     +------------------------------+----------------------------+-------------------------------------------------------------------------------+
 
 Notes: 1. Enable fdir filter for UDP tunnel: Vxlan / NVGRE (OS default package) , share code not
-      support outer header as inputset, so Out Dest IP and VNI/GRE_KEY may not able to be implemented.
+          support outer header as inputset, so Out Dest IP and VNI/GRE_KEY may not able to be implemented.
        2. For VXLAN case MAC_IPV4_TUN_*** means MAC_IPV4_UDP_VXLAN_***
        3. For Dest MAC, there is package /sharecode limitation on multicast dst mac support for FDIR
 
 Function type
 -------------
 
+    validate
     create
     list
     destroy
@@ -113,6 +114,7 @@ Prerequisites
 
 1. Hardware:
    columbiaville_25g/columbiaville_100g
+   design the cases with 2 ports card.
 
 2. Software:
    DPDK: http://dpdk.org/git/dpdk
@@ -127,7 +129,7 @@ Prerequisites
 
 5. Launch the app ``testpmd`` with the following arguments::
 
-    ./testpmd -c 0xff -n 6 -w 86:00.0 -- -i --portmask=0xff --rxq=64 --txq=64 --port-topology=loop
+    ./testpmd -c 0xff -n 6 -w 86:00.0,,flow-mark-support=1 -- -i --portmask=0xff --rxq=64 --txq=64 --port-topology=loop
     testpmd> set fwd rxonly
     testpmd> set verbose 1
 
@@ -138,11 +140,7 @@ Prerequisites
 
    Notes: if need two ports environment, launch ``testpmd`` with the following arguments::
 
-    ./testpmd -c 0xff -n 6 -w 86:00.0 -w 86:00.1 -- -i --portmask=0xff --rxq=64 --txq=64 --port-topology=loop
-
-   If create rules with mark actions, please add the following parameters in testpmd command line::
-
-    -w 86:00.0,flow-mark-support=1 -w 86:00.1,flow-mark-support=1
+    ./testpmd -c 0xff -n 6 -w 86:00.0,flow-mark-support=1 -w 86:00.1,flow-mark-support=1 -- -i --portmask=0xff --rxq=64 --txq=64 --port-topology=loop
 
 
 Default parameters
@@ -397,669 +395,694 @@ Send packets
 
    matched packets::
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(frag=1)/Raw('x'*20)
-    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/UDP()/Raw('x'*20)
-    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
-    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/ICMP()/Raw('x'*20)
-    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/Raw('x'*20)
-    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
-    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/UDP()/Raw('x'*20)
-    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
-    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/ICMP()/Raw('x'*20)
+    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
+    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP(frag=1)/Raw('x'*20)
+    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/UDP()/Raw('x'*20)
+    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
+    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/ICMP()/Raw('x'*20)
+    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/Raw('x'*20)
+    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
+    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/UDP()/Raw('x'*20)
+    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
+    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/ICMP()/Raw('x'*20)
 
    mismatched packets::
 
-    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/SCTP()/Raw('x'*20)
-    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/SCTP()/Raw('x'*20)
-    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
-    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
-    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)
-    p_gtpu16 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw('x'*20)
+    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/SCTP()/Raw('x'*20)
+    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IPv6()/SCTP()/Raw('x'*20)
+    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
+    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
+    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)
+    p_gtpu16 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/Raw('x'*20)
 
 * MAC_IPV4_GTPU
 
    matched packets::
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(frag=1)/Raw('x'*20)
-    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/UDP()/Raw('x'*20)
-    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
-    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/ICMP()/Raw('x'*20)
-    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/Raw('x'*20)
-    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
-    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/UDP()/Raw('x'*20)
-    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
-    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/ICMP()/Raw('x'*20)
-    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
+    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)
+    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(frag=1)/Raw('x'*20)
+    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/UDP()/Raw('x'*20)
+    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/TCP(sport=22, dport=23)/Raw('x'*20)
+    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/ICMP()/Raw('x'*20)
+    p_gtpu6 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/Raw('x'*20)
+    p_gtpu7 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/IPv6ExtHdrFragment(1000)/Raw('x'*20)
+    p_gtpu8 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/UDP()/Raw('x'*20)
+    p_gtpu9 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP( dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/TCP(sport=22, dport=23)/Raw('x'*20)
+    p_gtpu10 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/ICMP()/Raw('x'*20)
+    p_gtpu11 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
 
    mismatched packets::
 
-    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/Raw('x'*20)
-    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/SCTP()/Raw('x'*20)
-    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/SCTP()/Raw('x'*20)
-    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/IP()/Raw('x'*20)
-
-Test case: MAC_IPV4_PAY queue index
-===================================
+    p_gtpu12 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/Raw('x'*20)
+    p_gtpu13 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/SCTP()/Raw('x'*20)
+    p_gtpu14 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6()/SCTP()/Raw('x'*20)
+    p_gtpu15 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/IP()/Raw('x'*20)
 
-1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
+Test case: flow validation
+==========================
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+1. validate MAC_IPV4_PAY with queue index action::
 
-3. verify rules can be listed and destroyed::
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
 
-    testpmd> flow list 0
+   get the message::
 
-   check the existing rule.
-   destroy the rule::
+    Flow rule validated
 
-    testpmd> flow destroy 0 rule 0
+2. repeat step 1 with all patterns in pattern and input set table,
+   get the same result.
 
-   verify matched packets are not distributed to queue 1.
-   check there is no rule listed.
+3. repeat step 1-2 with action rss queues/drop/passthru/mark/mark+rss,
+   get the same result.
 
-Test case: MAC_IPV4_PAY selected inputset queue index
-=====================================================
+4. validate combined use of actions::
 
-1. create filter rules::
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark / count / end
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 0 1 end / mark id 1 / count identifier 0x1234 shared on / end
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions passthru / mark id 2 / count identifier 0x34 shared off / end
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark id 3 / rss / count shared on / end
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / count shared off / end
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 1 / end actions queue index 1 / end
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 17 / end actions queue index 2 / end
+   get the message::
 
-2. send matched packets::
+    Flow rule validated
 
-    pkt1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=1) / Raw('x' * 80)
-    pkt2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, proto=1) / Raw('x' * 80)
-    pkt3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
-    pkt4 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
-    pkt5 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=17, ttl=2, tos=4)/Raw('x' * 80)
-    pkt6 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, proto=17, ttl=2, tos=4)/Raw('x' * 80)
+5. check the flow list::
 
-   check the pkt1 and pkt2 are redirected to queue 1.
-   check the pkt3-pkt6 are redirected to queue 2
-   send mismatched packets::
+    testpmd> flow list 0
 
-    pkt7 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.22", proto=1) / Raw('x' * 80)
-    pkt8 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=6) / Raw('x' * 80)
-    pkt9 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/TCP(sport=22,dport=23)/ Raw('x' * 80)
-    pkt10 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1)/TCP(sport=22,dport=23)/ Raw('x' * 80)
+   there is no rule listed.
 
-   check the packets are not distributed to queue 1 or queue 2.
+Test case: negative validation
+==============================
 
-3. verify rules can be listed and destroyed::
+1. only count action::
 
-    testpmd> flow list 0
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions count / end
 
-   check the existing rule.
-   destroy the rule::
+   get the error message::
 
-    testpmd> flow flush 0
+    Invalid input action: Invalid argument
 
-   verify matched packets are not distributed to expected queue.
-   check there is no rule listed.
+2. void action::
 
-Test case: MAC_IPV4_UDP queue index
-===================================
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / and actions end
 
-1. create filter rules::
+   get the message::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions queue index 1 / end
+    Invalid argument
 
-2. send matched packets, check the packets is distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+3. conflict action::
 
-3. verify rules can be listed and destroyed::
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 2 3 end / rss / end
 
-    testpmd> flow list 0
+   get the message::
 
-   check the existing rule.
-   destroy the rule::
+    Unsupported action combination: Invalid argument
 
-    testpmd> flow destroy 0 rule 0
+4. invalid mark id::
 
-   verify matched packet is not distributed to queue 1.
-   check there is no rule listed.
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions passthru / mark id 4294967296 / end
 
-Test case: MAC_IPV4_TCP queue index
-===================================
+   get the message::
 
-1. create filter rules::
+    Bad arguments
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 63 / end
+5. invalid input set::
 
-2. send matched packets, check the packets is distributed to queue 63.
-   send mismatched packets, check the packets are not distributed to queue 63.
+    flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tc is 4 / end actions queue index 1 / end
 
-3. verify rules can be listed and destroyed::
+   get the message::
 
-    testpmd> flow list 0
+    Bad arguments
 
-   check the existing rule.
-   destroy the rule::
+6. invalid queue index::
 
-    testpmd> flow destroy 0 rule 0
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 64 / end
 
-   verify matched packet is not distributed to queue 63.
-   check there is no rule listed.
+   get the message::
 
-Test case: MAC_IPV4_SCTP queue index
-====================================
+    Invalid input action: Invalid argument
 
-1. create filter rules::
+7. invalid rss queues parameter
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1 / end actions queue index 2 / end
+   Invalid number of queues::
 
-2. send matched packets, check the packets is distributed to queue 2.
-   send mismatched packets, check the packets are not distributed to queue 2.
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 1 2 3 end / end
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 0 end / end
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues end / end
 
-3. verify rules can be listed and destroyed::
+   get the message::
 
-    testpmd> flow list 0
+    Invalid input action: Invalid argument
 
-   check the existing rule.
-   destroy the rule::
+   Discontinuous queues::
 
-    testpmd> flow destroy 0 rule 0
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 1 2 3 5 end / end
 
-   verify matched packet is not distributed to queue 2.
-   check there is no rule listed
+   get the message::
 
-Test case: MAC_IPV6_PAY queue index
-===================================
+    Discontinuous queue region: Invalid argument
 
-1. create filter rules::
+   invalid rss queues index::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions queue index 1 / end
+    flow validate 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 63 64 end / end
 
-2. send matched packets, check the packets is distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+   get the message::
 
-3. verify rules can be listed and destroyed::
+    Invalid queue region indexes.: Invalid argument
 
-    testpmd> flow list 0
+8. Invalid value of input set::
 
-   check the existing rule.
-   destroy the rule::
+    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x100 / end actions queue index 1 / end
+    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / gtp_psc qfi is 0x5 / end actions queue index 2 / end
+    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / end actions queue index 1 / end
 
-    testpmd> flow destroy 0 rule 0
+   get the message::
 
-   verify matched packet is not distributed to queue 1.
-   check there is no rule listed.
+    Bad arguments
 
-Test case: MAC_IPV6_PAY selected inputset queue index
-=====================================================
+9. unsupported pattern,validate GTPU rule with OS default package::
 
-1. create filter rules::
+    flow validate 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions drop / end
 
-    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 44 / end actions queue index 1 / end
-    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 6 / end actions queue index 2 / end
+   get the message::
 
-2. send matched packets::
+    Bad arguments
 
-    pkt1 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", nh=44, tc=1, hlim=2)/("X"*480)
-    pkt2 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment(1000)/("X"*480)
-    pkt3 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", nh=44)/TCP(sport=22,dport=23)/("X"*480)
-    pkt4 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment(1000)/TCP(sport=22,dport=23)/("X"*480)
-    pkt5 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", nh=6)/("X"*480)
-    pkt6 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)
+10. invalid port::
 
-   check pkt1-pkt4 are redirected to queue 1.
-   check pkt5 and pkt6 are redirected to queue 2.
-   send mismatched packets::
+    flow validate 2 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
 
-    pkt7 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2021", nh=44)/("X"*480)
-    pkt8 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)
-    pkt9 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", nh=17)/("X"*480)
+   get the message::
 
-   check the packets are not distributed to queue 1 or queue 2.
+    No such device: No such device
 
-3. verify rules can be listed and destroyed::
+11. check the flow list::
 
     testpmd> flow list 0
 
-   check the existing rule.
-   destroy the rule::
+   there is no rule listed.
 
-    testpmd> flow destroy 0 rule 0
 
-   verify matched packet are not distributed to expected queue.
-   check there is no rule listed.
+Test case: MAC_IPV4_PAY pattern
+===============================
 
-Test case: MAC_IPV6_UDP queue index
-===================================
+Subcase 1: MAC_IPV4_PAY queue index
+-----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
 
-2. send matched packets, check the packets is distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets are distributed to queue 1 without FDIR matched ID.
+   send mismatched packets, check the packets are not distributed to queue 1 without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   check the existing rule.
+   check the rule listed.
    destroy the rule::
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is not distributed to queue 1.
+4. verify matched packets are not distributed to queue 1 without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV6_TCP queue index
-===================================
+Subcase 2: MAC_IPV4_PAY rss queues
+----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 2 3 end / end
 
-2. send matched packets, check the packets is distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets are distributed to queue 2 or 3 without without FDIR matched ID.
+   send mismatched packets, check the packets are not distributed to queue 2 or 3 without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are not distributed to queue 2 or 3 without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV4_PAY passthru
+--------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is not distributed to queue 1.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions passthru / end
 
-Test case: MAC_IPV6_SCTP queue index
-====================================
+2. send matched packets, check the packets are distributed by RSS without FDIR matched ID.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions queue index 1 / end
+4. verify matched packets are distributed to the same queue without FDIR matched ID=0x0.
+   check there is no rule listed.
 
-2. send matched packets, check the packets is distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+Subcase 4: MAC_IPV4_PAY drop
+----------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions drop / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are dropped
+   send mismatched packets, check the packets are not dropped.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is not distributed to queue 1.
+4. verify matched packets are not dropped.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_PAY queue index
-============================================
+Subcase 5: MAC_IPV4_PAY mark+rss
+--------------------------------
+Note: This combined action is mark with RSS which is without queues specified.
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions mark / rss / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 6: MAC_IPV4_PAY mark
+----------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify the packets hit rule are not distributed to queue 1.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions mark id 1 / end
 
-Test case: MAC_IPV4_TUN_IPV4_UDP queue index
-============================================
+2. repeat the steps of passthru with mark part in subcase 3,
+   get the same result.
+
+Subcase 7: MAC_IPV4_PAY protocal
+--------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 1 / end actions queue index 1 / mark id 1 / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 17 / end actions passthru / mark id 3 / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets::
 
-3. verify rules can be listed and destroyed::
+    pkt1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=1) / Raw('x' * 80)
+    pkt2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, proto=1) / Raw('x' * 80)
+    pkt3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
+    pkt4 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)
+    pkt5 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=17, ttl=2, tos=4)/Raw('x' * 80)
+    pkt6 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1, proto=17, ttl=2, tos=4)/Raw('x' * 80)
 
-    testpmd> flow list 0
+   check the pkt1 and pkt2 are redirected to queue 1 with FDIR matched ID=0x1.
+   check the pkt3-pkt6 are distributed by RSS with FDIR matched ID=0x3.
+   send mismatched packets::
 
-   check the existing rule.
-   destroy the rule::
+    pkt7 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.22", proto=1) / Raw('x' * 80)
+    pkt8 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=6) / Raw('x' * 80)
+    pkt9 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/TCP(sport=22,dport=23)/ Raw('x' * 80)
+    pkt10 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", frag=1)/TCP(sport=22,dport=23)/ Raw('x' * 80)
 
-    testpmd> flow destroy 0 rule 0
+   check the packets received have not FDIR matched ID.
 
-   verify the packets hit rule are not distributed to queue 1.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets have not FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_TCP queue index
-============================================
+
+Test case: MAC_IPV4_UDP pattern
+===============================
+
+Subcase 1: MAC_IPV4_UDP queue index
+-----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions queue index 63 / mark id 0 / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets is distributed to queue 63 with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   check the existing rule.
+   check the rule listed.
    destroy the rule::
 
     testpmd> flow destroy 0 rule 0
 
-   verify the packets hit rule are not distributed to queue 1.
+4. verify matched packet is received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_SCTP queue index
-=============================================
+Subcase 2: MAC_IPV4_UDP rss queues
+----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions rss queues 0 1 2 3 end / mark id 4294967294 / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets is distributed to queue 0-3 with FDIR matched ID=0xfffffffe.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packet is not received without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV4_UDP passthru
+--------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rule with mark::
+
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions passthru / mark id 1 / end
+
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-   verify the packets hit rule are not distributed to queue 1.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY queue index
-================================================
+Subcase 4: MAC_IPV4_UDP drop
+----------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions drop / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packet, check the packet is dropped.
+   send mismatched packets, check the packets are not dropped.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packet is dropped.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 5: MAC_IPV4_UDP mark+rss
+--------------------------------
+Note: This combined action is mark with RSS which is without queues specified.
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
+
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions mark id 2 / rss / end
+
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x2
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-   verify the packets hit rule are not distributed to queue 1.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP queue index
-================================================
+Subcase 6: MAC_IPV4_UDP mark
+----------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions mark id 1 / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. repeat the step 2-3 of in subcase 3,
+   get the same result.
 
-3. verify rules can be listed and destroyed::
+Test case: MAC_IPV4_TCP pattern
+===============================
 
-    testpmd> flow list 0
+1. replace "udp" with "tcp" in all the subcases of MAC_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_UDP pattern.
+3. get the same result.
 
-   check the existing rule.
-   destroy the rule::
+Test case: MAC_IPV4_SCTP pattern
+================================
 
-    testpmd> flow destroy 0 rule 0
+1. replace "udp" with "sctp" in all the subcases of MAC_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_UDP pattern.
+3. get the same result.
 
-   verify the packets hit rule are not distributed to queue 1.
-   check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP queue index
-================================================
+Test case: MAC_IPV6_PAY pattern
+===============================
+
+Subcase 1: MAC_IPV6_PAY queue index
+-----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions queue index 1 / mark / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets is distributed to queue 1 with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   check the existing rule.
+   check the rule listed.
    destroy the rule::
 
     testpmd> flow destroy 0 rule 0
 
-   verify the packets hit rule are not distributed to queue 1.
+4. verify matched packet is received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP queue index
-=================================================
+Subcase 2: MAC_IPV6_PAY rss queues
+----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end \
+    actions rss queues 56 57 58 59 60 61 62 63 end / mark / end
 
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
+2. send matched packets, check the packets is distributed to queue 56-63 with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are not distributed to queue 56-63 with FDIR matched ID=0x0.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packet is received without FDIR matched ID=0x0.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV6_PAY passthru
+--------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify the packets hit rule are not distributed to queue 1.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions passthru / mark / end
 
-Test case: queue index wrong parameters
-=======================================
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-1. invalid parameters::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 64 / end
+4. verify matched packets are destributed to the same queue without FDIR matched ID .
+   check there is no rule listed.
 
-   failed to be created.
+Subcase 4: MAC_IPV6_PAY drop
+----------------------------
 
-2. same pattern items, different action::
+1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / end
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 2 / end
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions drop / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions drop / end
+
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are not dropped.
 
-   flow 1 can be created successfully,
-   flow 2 and flow 3 failed to be created cause of confliction.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packet is dropped.
+   check there is no rule listed.
 
-Test case: MAC_IPV4_PAY passthru/count
-======================================
+Subcase 5: MAC_IPV6_PAY mark+rss
+--------------------------------
+Note: This combined action is mark with RSS which is without queues specified.
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions passthru / count / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions mark / rss / end
 
-2. send matched packets, check the packets are redirected by RSS
-   send mismatched packets, check the packets are redirected by RSS
-   check the count number::
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-    flow query 0 0 count
-    count:
-     hits_set: 1
-     bytes_set: 0
-     hits: 2
-     bytes: 0
+3. repeat step 3 of subcase 1.
 
-3. verify rules can be listed and destroyed::
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-    testpmd> flow list 0
+Subcase 6: MAC_IPV6_PAY mark
+----------------------------
 
-   check the existing rule.
-   destroy the rule::
+1. create filter rules::
 
-    testpmd> flow destroy 0 rule 0
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions mark / end
 
-   verify matched packets are redirected to the same queue.
-   check there is no rule listed.
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-Test case: MAC_IPV4_PAY passthru/mark
-=====================================
+Subcase 7: MAC_IPV6_PAY protocal
+--------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is ABAB:910A:2222:5498:8475:1111:3900:1010 proto is 44 / end actions rss queues 5 6 end / mark id 1 / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 6 / end actions mark id 2 / rss / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets::
 
-3. verify rules can be listed and destroyed::
+    pkt1 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1010", nh=44, tc=1, hlim=2)/("X"*480)
+    pkt2 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1010")/IPv6ExtHdrFragment(1000)/("X"*480)
+    pkt3 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1010", nh=44)/TCP(sport=22,dport=23)/("X"*480)
+    pkt4 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1010")/IPv6ExtHdrFragment(1000)/TCP(sport=22,dport=23)/("X"*480)
+    pkt5 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", nh=6)/("X"*480)
+    pkt6 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)
 
-    testpmd> flow list 0
+   check pkt1-pkt4 are redirected to queue 5 or queue 6 with FDIR matched ID=0x1.
+   check pkt5 and pkt6 are distributed by RSS with FDIR matched ID=0x2.
+   send mismatched packets::
 
-   check the existing rule.
-   destroy the rule::
+    pkt7 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="ABAB:910A:2222:5498:8475:1111:3900:1011", nh=44)/("X"*480)
+    pkt8 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)
+    pkt9 = Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", nh=17)/("X"*480)
 
-    testpmd> flow destroy 0 rule 0
+   check the packets received have not FDIR matched ID.
 
-   verify matched packets are redirected to the same queue without FDIR ID.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets have not FDIR matched.
    check there is no rule listed.
 
-Test case: MAC_IPV4_UDP passthru/mark
-=====================================
+
+Test case: MAC_IPV6_UDP pattern
+===============================
+
+Subcase 1: MAC_IPV6_UDP queue index
+-----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions passthru / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions queue index 1 / mark / end
 
-2. send matched packets, check the packets are redirected by RSS.
-   send mismatched packets, check the packets are redirected by RSS.
+2. send matched packets, check the packets is distributed to queue 1 with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are received without FDIR matched ID=0x0.
 
 3. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   check the existing rule.
+   check the rule listed.
    destroy the rule::
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue.
+4. verify matched packet is received without FDIR matched ID=0x0.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TCP passthru/mark
-=====================================
+Subcase 2: MAC_IPV6_UDP rss queues
+----------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions rss / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets is distributed by RSS.
+   send mismatched packets, check the packets are distributed by RSS too.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packet is destributed to the same queue.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV6_UDP passthru
+--------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions passthru / mark / end
 
-Test case: MAC_IPV4_SCTP passthru/mark
-======================================
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1 / end actions passthru / mark / end
+4. verify matched packets are destributed to the same queue without FDIR matched ID .
+   check there is no rule listed.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+Subcase 4: MAC_IPV6_UDP drop
+----------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions drop / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are not dropped.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify matched packet is dropped.
    check there is no rule listed.
 
-Test case: MAC_IPV6_PAY passthru/mark
-=====================================
+Subcase 5: MAC_IPV6_UDP mark+rss
+--------------------------------
+Note: This combined action is mark with RSS which is without queues specified.
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2 tc is 1 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions mark / rss / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 6: MAC_IPV6_UDP mark
+----------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions mark / end
 
-Test case: MAC_IPV6_UDP passthru/mark
-=====================================
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions passthru / mark / end
+Test case: MAC_IPV6_TCP pattern
+===============================
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+1. replace "udp" with "tcp" in all the subcases of MAC_IPV6_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV6_UDP pattern.
+3. get the same result.
 
-3. verify rules can be listed and destroyed::
+Test case: MAC_IPV6_SCTP pattern
+================================
 
-    testpmd> flow list 0
+1. replace "udp" with "sctp" in all the subcases of MAC_IPV6_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV6_UDP pattern.
+3. get the same result.
 
-   check the existing rule.
-   destroy the rule::
 
-    testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
 
-Test case: MAC_IPV6_TCP passthru/mark
-=====================================
+Test case: MAC_IPV4_TUN_IPV4_PAY pattern
+========================================
+
+Subcase 1: MAC_IPV4_TUN_IPV4_PAY queue index
+--------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are distributed to queue 1 without FDIR matched ID.
+   send mismatched packets, check the packets are not distributed to queue 1 without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1070,106 +1093,92 @@ Test case: MAC_IPV6_TCP passthru/mark
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+   verify the packets hit rule are not distributed to queue 1 without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV6_SCTP passthru/mark
-======================================
+Subcase 2: MAC_IPV4_TUN_IPV4_PAY rss queues
+-------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 end / mark / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are distributed to queue group with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_PAY passthru/mark
-==============================================
+Subcase 3: MAC_IPV4_TUN_IPV4_PAY passthru
+-----------------------------------------
 
 1. create filter rules::
 
     flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions passthru / mark / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_UDP passthru/mark
-==============================================
+Subcase 4: MAC_IPV4_TUN_IPV4_PAY drop
+-------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets dropped.
+   send mismatched packets, check the packets are not dropped.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. check there is no rule listed.
+   verify the packets hit the rule are not dropped.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 5: MAC_IPV4_TUN_IPV4_PAY mark/rss
+-----------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / rss / end
 
-Test case: MAC_IPV4_TUN_IPV4_TCP passthru/mark
-==============================================
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions passthru / mark / end
+4. verify matched packet is redirected to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+Subcase 6: MAC_IPV4_TUN_IPV4_PAY mark
+-------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / end
 
-   check the existing rule.
-   destroy the rule::
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-    testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+Test case: MAC_IPV4_TUN_IPV4_UDP pattern
+========================================
 
-Test case: MAC_IPV4_TUN_IPV4_SCTP passthru/mark
-===============================================
+Subcase 1: MAC_IPV4_TUN_IPV4_UDP queue index
+--------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are distributed to queue 1 with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1180,106 +1189,106 @@ Test case: MAC_IPV4_TUN_IPV4_SCTP passthru/mark
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY passthru/mark
-==================================================
+Subcase 2: MAC_IPV4_TUN_IPV4_UDP rss queues
+-------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions passthru / mark / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss queues 38 39 40 41 end / mark id 1 / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are distributed to queue group with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are received without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP passthru/mark
-==================================================
+Subcase 3: MAC_IPV4_TUN_IPV4_UDP passthru
+-----------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions passthru / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify the packets hit rule are distributed to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 4: MAC_IPV4_TUN_IPV4_UDP drop
+-------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / end
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP passthru/mark
-==================================================
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions passthru / mark / end
+4. verify the packets hit rule are received without FDIR matched ID.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+Subcase 5: MAC_IPV4_TUN_IPV4_UDP mark/rss
+-----------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id 1 / rss / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are distributed to the same queue without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP passthru/mark
-===================================================
+Subcase 6: MAC_IPV4_TUN_IPV4_UDP mark
+-------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions passthru / mark / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-3. verify rules can be listed and destroyed::
 
-    testpmd> flow list 0
+Test case: MAC_IPV4_TUN_IPV4_TCP pattern
+========================================
 
-   check the existing rule.
-   destroy the rule::
+1. replace "udp" with "tcp" in all the subcases of MAC_IPV4_TUN_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_TUN_IPV4_UDP pattern.
+3. get the same result.
 
-    testpmd> flow destroy 0 rule 0
+Test case: MAC_IPV4_TUN_IPV4_SCTP pattern
+=========================================
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+1. replace "udp" with "sctp" in all the subcases of MAC_IPV4_TUN_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_TUN_IPV4_UDP pattern.
+3. get the same result.
 
-Test case: MAC_IPV4_PAY mark/rss
-================================
+
+Test case: MAC_IPV4_TUN_MAC_IPV4_PAY pattern
+============================================
+
+Subcase 1: MAC_IPV4_TUN_MAC_IPV4_PAY queue index
+------------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 0 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed to queue 0 without FDIR matched ID.
+   send mismatched packets, check the packets are not distributed to queue 0 without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1290,84 +1299,91 @@ Test case: MAC_IPV4_PAY mark/rss
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packets are redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are not distributed to queue 0 without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_UDP mark/rss
-================================
+Subcase 2: MAC_IPV4_TUN_MAC_IPV4_PAY rss queues
+-----------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions mark / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 0 1 end / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 0.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 0.
+2. send matched packets, check the packets are distributed to queue group without FDIR matched ID.
+   send mismatched packets, check the packets are not distributed to queue group without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify the packets hit rule are not distributed to queue group without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV4_TUN_MAC_IPV4_PAY passthru
+---------------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions passthru / end
 
-Test case: MAC_IPV4_TCP mark/rss
-================================
+2. send matched packets, check the packets are distributed by RSS without FDIR matched ID.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions mark id 1 / rss / end
+4. verify the packets hit rule are distributed to same queue without FDIR matched ID.
+   check there is no rule listed.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+Subcase 4: MAC_IPV4_TUN_MAC_IPV4_PAY drop
+-----------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are not dropped.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are not dropped.
    check there is no rule listed.
 
-Test case: MAC_IPV4_SCTP mark/rss
-=================================
+Subcase 5: MAC_IPV4_TUN_MAC_IPV4_PAY mark/rss
+---------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / rss / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify the packets hit rule are distributed to same queue without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 6: MAC_IPV4_TUN_MAC_IPV4_PAY mark
+-----------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / end
 
-Test case: MAC_IPV6_PAY mark/rss
-================================
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
+
+Test case: MAC_IPV4_TUN_MAC_IPV4_UDP pattern
+============================================
+
+Subcase 1: MAC_IPV4_TUN_MAC_IPV4_UDP queue index
+------------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2 tc is 1 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 15 / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed to queue 15 with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are received without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1378,106 +1394,106 @@ Test case: MAC_IPV6_PAY mark/rss
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV6_UDP mark/rss
-================================
+Subcase 2: MAC_IPV4_TUN_MAC_IPV4_UDP rss queues
+-----------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions mark id 1 / rss / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss queues 0 1 2 3 end / mark id 1 / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are distributed to queue group with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV6_TCP mark/rss
-================================
+Subcase 3: MAC_IPV4_TUN_MAC_IPV4_UDP passthru
+---------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions passthru / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 4: MAC_IPV4_TUN_MAC_IPV4_UDP drop
+-----------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / mark id 1 / end
 
-Test case: MAC_IPV6_SCTP mark/rss
-=================================
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions mark id 1 / rss / end
+4. verify the packets hit rule are distributed by RSS without FDIR matched ID.
+   check there is no rule listed.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+Subcase 5: MAC_IPV4_TUN_MAC_IPV4_UDP mark/rss
+---------------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss / mark id 1 / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are distributed by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
+4. verify the packets hit rule are distributed to same queue without FDIR matched ID.
    check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_PAY mark/rss
-=========================================
+Subcase 6: MAC_IPV4_TUN_MAC_IPV4_UDP mark
+-----------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 0.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 0.
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-3. verify rules can be listed and destroyed::
 
-    testpmd> flow list 0
+Test case: MAC_IPV4_TUN_MAC_IPV4_TCP pattern
+============================================
 
-   check the existing rule.
-   destroy the rule::
+1. replace "udp" with "tcp" in all the subcases of MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
+3. get the same result.
 
-    testpmd> flow destroy 0 rule 0
+Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP pattern
+=============================================
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+1. replace "udp" with "sctp" in all the subcases of MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
+2. Then repeat all the steps in all the subcases of MAC_IPV4_TUN_MAC_IPV4_UDP pattern.
+3. get the same result.
 
-Test case: MAC_IPV4_TUN_IPV4_UDP mark/rss
-=========================================
+Test case: MAC_IPV4_GTPU_EH pattern
+===================================
+
+Subcase 1: MAC_IPV4_GTPU_EH queue index
+---------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed to queue 1 with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are not distributed to queue 1 without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1488,128 +1504,131 @@ Test case: MAC_IPV4_TUN_IPV4_UDP mark/rss
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+4. verify matched packets are not distributed to queue 1 without FDIR matched ID.
+   Then check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_IPV4_TCP mark/rss
-=========================================
+Subcase 2: MAC_IPV4_GTPU_EH queue group
+---------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions rss queues 0 1 2 3 end / mark id 1 / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed to queue group with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are not distributed to queue group without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are not distributed to queue group without FDIR matched ID.
+   Then check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 3: MAC_IPV4_GTPU_EH passthru
+------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions passthru / mark id 1 / end
 
-Test case: MAC_IPV4_TUN_IPV4_SCTP mark/rss
-==========================================
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions mark id 1 / rss / end
+4. verify matched packets are redirected to the same queue without FDIR ID.
+   check there is no rule listed.
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+Subcase 4: MAC_IPV4_GTPU_EH drop
+--------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions drop / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are not dropped without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+4. verify matched packets are not dropped without FDIR matched ID.
+   Then check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY mark/rss
-=============================================
+Subcase 5: MAC_IPV4_GTPU_EH mark/rss
+------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions mark id 1 / rss / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x1.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are redirected to the same queue without FDIR matched ID.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 6: MAC_IPV4_GTPU_EH mark
+--------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions mark id 1 / end
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP mark/rss
-=============================================
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-1. create filter rules::
+Subcase 7: MAC_IPV4_GTPU_EH QFI queue index / mark
+--------------------------------------------------
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions mark id 1 / rss / end
+1. create filter rules on port 0::
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / end actions queue index 1 / mark id 3 / end
 
-3. verify rules can be listed and destroyed::
+2. send matched packets, check the packet is redirected to queue 1 with FDIR matched ID=0x3::
 
-    testpmd> flow list 0
+    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/TCP()/Raw('x'*20)
 
-   check the existing rule.
-   destroy the rule::
+   send mismatched packets, check the packet received has not FDIR::
 
-    testpmd> flow destroy 0 rule 0
+    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+3. repeat step 3 of subcase 1.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP mark/rss
-=============================================
+4. verify matched packet received has not FDIR.
+   Then check there is no rule listed.
 
-1. create filter rules::
+Subcase 8: MAC_IPV4_GTPU_EH without QFI rss queues / mark
+---------------------------------------------------------
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions mark id 1 / rss / end
+1. create filter rules on port 0::
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc / end actions rss queues 2 3 end / mark id 1 / end
 
-3. verify rules can be listed and destroyed::
+2. send matched packets, check the packet is distributed to queue 2 or queue 3 with FDIR matched ID=0x3::
 
-    testpmd> flow list 0
+    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP()/Raw('x'*20)
 
-   check the existing rule.
-   destroy the rule::
+   send mismatched packets, check the packet received has no FDIR::
 
-    testpmd> flow destroy 0 rule 0
+    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP()/Raw('x'*20)
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+3. repeat step 3 of subcase 1.
+
+4. verify matched packet received has not FDIR.
+   Then check there is no rule listed.
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP mark/rss
-==============================================
+Test case: MAC_IPV4_GTPU pattern
+================================
+
+Subcase 1: MAC_IPV4_GTPU queue index
+------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions mark id 1 / rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions queue index 1 / mark / end
 
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
+2. send matched packets, check the packets are distributed to queue 1 with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are not distributed to queue 1 without FDIR matched ID.
 
 3. verify rules can be listed and destroyed::
 
@@ -1620,1263 +1639,399 @@ Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP mark/rss
 
     testpmd> flow destroy 0 rule 0
 
-   verify matched packet is redirected to the same queue without FDIR ID.
-   check there is no rule listed.
+4. verify matched packets are not distributed to queue 1 without FDIR matched ID.
+   Then check there is no rule listed.
 
-Test case: mark/rss wrong parameters
-====================================
+Subcase 2: MAC_IPV4_GTPU queue group
+------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions rss / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions rss queues 0 1 end / mark / end
 
-2. The rule failed to be created, report proper error message.
+2. send matched packets, check the packets are distributed to queue group with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are not distributed to queue group without FDIR matched ID.
 
-3. list the flow::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
-
-   there is no flow listed.
+4. verify matched packets are not distributed to queue group without FDIR matched ID.
+   Then check there is no rule listed.
 
-Test case: MAC_IPV4_PAY drop
-============================
+Subcase 3: MAC_IPV4_GTPU passthru
+---------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions drop / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions passthru / mark / end
 
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-3. verify rules can be listed and destroyed::
+3. repeat step 3 of subcase 1.
 
-    testpmd> flow list 0
+4. verify matched packets are distributed to same queue without FDIR matched ID.
+   Then check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 4: MAC_IPV4_GTPU drop
+-----------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. create filter rules::
 
-   check there is no rule listed.
-   verify matched packets are not dropped.
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions drop / end
 
-Test case: MAC_IPV4_UDP drop
-============================
+2. send matched packets, check the packets are dropped.
+   send mismatched packets, check the packets are not dropped.
 
-1. create filter rules::
+3. repeat step 3 of subcase 1.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions drop / end
+4. verify matched packets are not dropped without FDIR matched ID.
+   Then check there is no rule listed.
 
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
+Subcase 5: MAC_IPV4_GTPU mark/rss
+---------------------------------
 
-3. verify rules can be listed and destroyed::
+1. create filter rules::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions mark / rss / end
 
-   check the existing rule.
-   destroy the rule::
+2. send matched packets, check the packets are redirected by RSS with FDIR matched ID=0x0.
+   send mismatched packets, check the packets are redirected by RSS without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+3. repeat step 3 of subcase 1.
 
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
+4. verify matched packets are distributed to same queue without FDIR matched ID.
+   Then check there is no rule listed.
 
-Test case: MAC_IPV4_TCP drop
-============================
+Subcase 6: MAC_IPV4_GTPU mark
+-----------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions drop / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions mark / end
 
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
+2. repeat the steps of passthru in subcase 3,
+   get the same result.
 
-3. verify rules can be listed and destroyed::
 
-    testpmd> flow list 0
+Test case: negative cases
+=========================
 
-   check the existing rule.
-   destroy the rule::
+Subcase 1: invalid parameters of queue index
+--------------------------------------------
 
-    testpmd> flow destroy 0 rule 0
+1. Invalid parameters::
 
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 64 / end
 
-Test case: MAC_IPV4_SCTP drop
-=============================
+   Failed to create flow, report message::
 
-1. create filter rules::
+    Invalid queue for FDIR.: Invalid argument
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 / end actions drop / end
+2. check there is no rule listed.
 
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
+Subcase 2: invalid parameters of rss queues
+-------------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. Invalid number of queues::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 1 2 3 end / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 0 end / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues end / end
 
-   check the existing rule.
-   destroy the rule::
+   Failed to create flow, report message::
 
-    testpmd> flow destroy 0 rule 0
+    Invalid input action: Invalid argument
 
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
+2. Discontinuous queues::
 
-Test case: MAC_IPV6_PAY drop
-============================
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 1 2 3 5 end / end
 
-1. create filter rules::
+   Failed to create flow, report message::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2 tc is 1 \
-    / end actions drop / end
+    Discontinuous queue region: Invalid argument
 
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
+3. invalid queue index::
 
-3. verify rules can be listed and destroyed::
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 63 64 end / end
 
-    testpmd> flow list 0
+   Failed to create flow, report message::
 
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
-
-Test case: MAC_IPV6_UDP drop
-============================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
-
-Test case: MAC_IPV6_TCP drop
-============================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
-
-Test case: MAC_IPV6_SCTP drop
-=============================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packet dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packet hit the rule is not dropped.
-
-Test case: MAC_IPV4_TUN_IPV4_PAY drop
-=====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_IPV4_UDP drop
-=====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_IPV4_TCP drop
-=====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_IPV4_SCTP drop
-======================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY drop
-=========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP drop
-=========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP drop
-=========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP drop
-==========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions drop / end
-
-2. send matched packets, check the packets dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   check there is no rule listed.
-   verify the packets hit the rule are not dropped.
-
-Test case: MAC_IPV4_PAY queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 0 1 end / end
-
-2. send matched packets, check the packets are distributed to queue 0 or 1.
-   send mismatched packets, check the packets are not distributed to queue 0 or 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify pkt1 and pkt2 are not distributed to queue 0 or 1.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_UDP queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions rss queues 1 2 3 4 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TCP queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions rss queues 56 57 58 59 60 61 62 63 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_SCTP queue group
-====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1 / end actions rss queues 0 1 2 3 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV6_PAY queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2 tc is 1 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV6_UDP queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV6_TCP queue group
-===================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV6_SCTP queue group
-====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_IPV4_PAY queue group
-============================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_IPV4_UDP queue group
-============================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss queues 38 39 40 41 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_IPV4_TCP queue group
-============================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_IPV4_SCTP queue group
-=============================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY queue group
-================================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP queue group
-================================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP queue group
-================================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP queue group
-=================================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions rss queues 1 2 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packets hit rule are not distributed to queue group.
-   check there is no rule listed.
-
-Test case: queue group wrong parameters
-=======================================
-
-1. invalid number of queues::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 0 1 2 end / end
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 0 end / end
-
-2. Discontinuous queues::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 1 2 3 5 end / end
-
-3. invalid queue index::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 63 64 end / end
-
-4. "--rxq=32 --txq=32", set queue group 64 queues::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions rss queues 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 end / end
-
-all the above five rules are failed to created.
-
-5. "--rxq=64 --txq=64", set queue group 64 queues,
-   create the 64 queues flow successfully.
-   send matched packets, check the packets are distributed to queue 0-63.
-   send mismatched packets, check the packets are distributed to queue 0-63 too.
-
-Test case: MAC_IPV4_GTPU_EH queue index
-=======================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / end
-
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are not distributed to queue 1.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU_EH passthru/mark
-=========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions passthru / mark / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are redirected to the same queue without FDIR ID.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU_EH mark/rss
-====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions mark id 1 / rss / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are redirected to the same queue without FDIR ID.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU_EH drop
-================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions drop / end
-
-2. send matched packets, check the packets are dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are not dropped.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU_EH queue group
-=======================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions rss queues 0 1 end / end
-
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are not distributed to queue group.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU queue index
-====================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions queue index 1 / end
-
-2. send matched packets, check the packets are distributed to queue 1.
-   send mismatched packets, check the packets are not distributed to queue 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are not distributed to queue 1.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU passthru/mark
-======================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions passthru / mark / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are redirected to the same queue without FDIR ID.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU mark/rss
-=================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions mark id 1 / rss / end
-
-2. send matched packets, check the packets are redirected by RSS with FDIR ID 1.
-   send mismatched packets, check the packets are redirected by RSS without FDIR ID 1.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are redirected to the same queue without FDIR ID.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU drop
-=============================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions drop / end
-
-2. send matched packets, check the packets are dropped.
-   send mismatched packets, check the packets are not dropped.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
+    Invalid queue region indexes.: Invalid argument
 
-   check the existing rule.
-   destroy the rule::
+4. "--rxq=7 --txq=7", set queue group 8 queues::
 
-    testpmd> flow destroy 0 rule 0
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions rss queues 0 1 2 3 4 5 6 7 end / end
 
-   verify matched packets are not dropped.
-   Then check there is no rule listed.
+   Failed to create flow, report message::
 
-Test case: MAC_IPV4_GTPU queue group
-====================================
+    Invalid queue region indexes.: Invalid argument
 
-1. create filter rules::
+5. check there is no rule listed.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions rss queues 0 1 end / end
+6. "--rxq=8 --txq=8", set queue group 8 queues,
+   create the 8 queues flow successfully.
+   send matched packets, check the packets are distributed to queue 0-7.
+   send mismatched packets, check the packets are distributed to queue 0-7 too.
 
-2. send matched packets, check the packets are distributed to queue group.
-   send mismatched packets, check the packets are not distributed to queue group.
+Subcase 3: Invalid parameters of input set
+------------------------------------------
 
-3. verify rules can be listed and destroyed::
+1. Invalid value of teid and qfi::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x100 / end actions queue index 1 / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / gtp_psc qfi is 0x5 / end actions queue index 2 / end
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / end actions queue index 1 / end
 
-   check the existing rule.
-   destroy the rule::
+   Failed to create flow, report message "Bad arguments"
 
-    testpmd> flow destroy 0 rule 0
+2. check there is no rule listed.
 
-   verify matched packets are not distributed to queue group.
-   Then check there is no rule listed.
+Subcase 4: Invalid parameters of mark ID
+----------------------------------------
 
-Test case: MAC_IPV4_GTPU_EH mark/count/query
-============================================
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 2 / mark id 2 / count / end
-
-2. send matched packets, check the packets are distributed to queue 2, the FDIR=0x2.
-   send mismatched packets, check the packets are not distributed to queue 2, no FDIR.
-   check the count number::
-
-    flow query 0 0 count
-    count:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are not distributed to queue 2, and no FDIR.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_GTPU mark/count/query
-=========================================
-
-1. create filter rules on port 1::
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 / end actions queue index 1 / mark id 4294967296 / end
 
-    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions rss queues 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 end / mark id 100 / count / end
+   Failed to create flow, report message "Bad arguments"
 
-2. send matched packets, check the packets are distributed to queue in 0-63, the FDIR=0x64::
+2. check there is no rule listed.
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)
+Subcase 5: Duplicated rules
+---------------------------
 
-   send mismatched packets, check the packets have not FDIR::
+1. Create a FDIR rule::
 
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/IP()/Raw('x'*20)
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 1 / end
 
-   check the count number::
+   the rule is created successfully.
 
-    flow query 1 0 count
-    count:
-     hits_set: 1
-     bytes_set: 0
-     hits: 2
-     bytes: 0
+2. Create the same rule again, Failed to create flow, report message::
 
-3. verify rules can be listed and destroyed::
+    Rule already exists!: File exists
 
-    testpmd> flow list 1
+3. check there is only one rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 6: conflicted rules
+---------------------------
 
-    testpmd> flow destroy 1 rule 0
+1. Create a FDIR rule::
 
-   verify matched packets are distributed to queue in 0-63, and no FDIR.
-   Then check there is no rule listed.
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 1 / end
 
-Test case: MAC_IPV4_GTPU_EH QFI mark/count/query
-================================================
+   the rule is created successfully.
 
-1. create filter rules on port 1::
+2. Create a rule with same input set but different action::
 
-    flow create 1 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / end actions drop / mark id 3 / count / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 2 / end
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions drop / end
 
-2. send matched packets, check the packets are dropped::
+   Failed to create the two flows, report message::
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/TCP()/Raw('x'*20)
+    Rule already exists!: File exists
 
-   send mismatched packets, check the packets are not dropped, no FDIR::
+3. check there is only one rule listed.
 
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
+Subcase 7: conflicted actions
+-----------------------------
 
-   check the count number::
+1. Create a rule with two conflicted actions::
 
-    flow query 1 0 count
-    count:
-     hits_set: 1
-     bytes_set: 0
-     hits: 1
-     bytes: 0
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue index 1 / rss queues 2 3 end / end
 
-3. verify rules can be listed and destroyed::
+   Failed to create flow, report message::
 
-    testpmd> flow list 1
+    Invalid input action: Invalid argument
 
-   check the existing rule.
-   destroy the rule::
+2. check there is no rule listed.
 
-    testpmd> flow destroy 1 rule 0
+Subcase 8: void action
+----------------------
 
-   verify matched packets are not dropped, and no FDIR.
-   Then check there is no rule listed.
+1. Create a rule with void action::
 
-Test case: MAC_IPV4_GTPU_EH without QFI mark/count/query
-========================================================
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions end
 
-1. create filter rules on port 0::
+   Failed to create flow, report message::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc / end actions queue index 15 / mark id 3 / count / end
+    Invalid input action: Invalid argument
 
-2. send matched packets, check the packets are distributed to queue 15, the FDIR=0x3::
+2. check there is no rule listed.
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP()/Raw('x'*20)
+Subcase 9: unsupported action
+-----------------------------
 
-   send mismatched packets, check the packets are not distributed to queue 15, no FDIR::
+1. Create a rule with count action only::
 
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0)/IP()/TCP()/Raw('x'*20)
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions count / end
 
-   check the count number::
+   Failed to create flow, report message::
 
-    flow query 0 0 count
-    count:
-     hits_set: 1
-     bytes_set: 0
-     hits: 1
-     bytes: 0
+    Invalid input action: Invalid argument
 
-3. verify rules can be listed and destroyed::
+2. check there is no rule listed.
 
-    testpmd> flow list 0
+Subcase 10: delete a non-existent rule
+--------------------------------------
 
-   check the existing rule.
-   destroy the rule::
+1. show the rule list of port 0::
 
-    testpmd> flow destroy 0 rule 0
+    flow list 0
 
-   verify matched packets are not distributed to queue 15, and no FDIR.
-   Then check there is no rule listed.
+   There is no rule listed.
 
-Test case: MAC_IPV4_GTPU_EH multirules
-======================================
+2. destroy rule 0 of port 0::
 
-1. create filter rules on port 0::
+    flow destroy 0 rule 0
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / end
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x35 / end actions queue index 2 / end
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 / gtp_psc qfi is 0x35 / end actions queue index 3 / end
+   There is no error message reported.
 
-   the three rules are created successfully.
-   then create the following rules::
+3. check there is no rule listed.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 / gtp_psc qfi is 0x35 / end actions queue index 3 / end
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 / gtp_psc qfi is 0x35 / end actions queue index 4 / end
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 / gtp_psc qfi is 0x75 / end actions queue index 4 / end
+4. flush rules of port 0::
 
-   the three rules are failed to created.
-   then create the following rule::
+    flow flush 0
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x1234567 / gtp_psc qfi is 0x34 / end actions queue index 3 / end
+   There is no error message reported.
 
-   the rule is created successfully.
+5. check there is no rule listed.
 
-2. send matched packets::
+Subcase 11: unsupported input set field
+---------------------------------------
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
-    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
-    p_gtpu4 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
+1. Create a IPV4_PAY rule with TC input set::
 
-   check the packets, p_gtpu1 to queue 1, p_gtpu2 to queue 3, p_gtpu3 to queue 2, p_gtpu4 to queue 3.
-   send mismatched packets, check the packets are not distributed to queue 1-3::
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 tc is 2 / end actions queue index 1 / end
 
-    p_gtpu5 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x36)/IP()/Raw('x'*20)
+   Failed to create flow, report message::
 
-3. verify rules can be listed and destroyed::
+    Bad arguments
 
-    testpmd> flow list 0
+2. check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Subcase 12: invalid port
+------------------------
 
-    testpmd> flow flush 0
+1. Create a rule on port 2::
 
-   verify matched packets are not distributed to same queue.
-   Then check there is no rule listed.
+    flow create 2 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end
 
-Test case: MAC_IPV4_GTPU_EH two ports
-=====================================
+   Failed to create flow, report message::
 
-1. create filter rules on two ports::
+    No such device: No such device
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / end
-    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / end
+2. check there is no rule listed on port 2::
 
-   send matched packets::
+    testpmd> flow list 2
+    Invalid port 2
 
-    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
+Subcase 13: unsupported pattern
+-------------------------------
 
-   send the packet to two ports, both are distributed to queue 1.
+1. Create a GTPU rule with OS default package::
 
-2. create filter rules on two ports::
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions drop / end
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x35 / end actions queue index 2 / end
-    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x35 / end actions queue index 3 / end
+   Failed to create flow, report error message.
 
-   send matched packets::
+2. check there is no rule listed.
 
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
+Subcase 14: conflict patterns
+-----------------------------
 
-   send the packet to two ports, both are distributed to expected queue.
+Note: MAC_IPV4_UDP packet can match MAC_IPV4_PAY rule if ip address can match.
+so if there is a MAC_IPV4_PAY rule existing,
+MAC_IPV4_UDP rule will be set to switch rule.
+set "--log-level=ice,7", then check::
 
-3. flush the rules::
+    ice_flow_create(): Succeeded to create (1) flow -> FDIR
+    ice_flow_create(): Succeeded to create (2) flow -> switch
 
-    flow flush 0
-    flow flush 1
+1. set MAC_IPV4_PAY rule firstly::
 
-4. create filter rules on two ports::
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions queue index 1 / end
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / end
-    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions queue index 2 / end
+   the first flow rule is set to fdir filter, send matched packet::
 
-   send matched packets::
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/Raw('x' * 80)],iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
 
-    p_gtpu2 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x35)/IP()/Raw('x'*20)
-    p_gtpu3 = Ether(src="a4:bf:01:51:27:ca", dst="00:00:00:00:01:03")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
+   the two packets are both redirected to queue 1.
+   then create MAC_IPV4_UDP flow, it is set to switch filter::
 
-   send the packets to two ports,
-   p_gtpu2 is not distributed to queue 1 of port 0, it is distributed to queue 2 of port 1.
-   p_gtpu3 is distributed to queue 2 of port 1, it is distributed to queue 1 of port 0.
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 2 / end
 
-5. verify rules can be listed and destroyed::
+   send same packets, MAC_IPV4_PAY packet to queue 1, MAC_IPV4_UDP packet to queue 2.
 
-    testpmd> flow list 0
-    testpmd> flow list 1
+2. flush the rules.
 
-   check the existing rules.
-   destroy the rule::
+3. set MAC_IPV4_UDP rule firstly::
 
-    testpmd> flow destroy 0 rule 0
-    testpmd> flow destroy 1 rule 0
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 2 / end
 
-   verify matched packets are not distributed to expected queue.
-   Then check there is no rule listed.
+   the first rule is set to fdir filter, send matched packet::
 
-Test case: MAC_IPV4_GTPU_EH wrong parameters
-============================================
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
 
-1. create filter rules on port 0::
+   the packet is redirected to queue 2.
+   then create MAC_IPV4_PAY rule, it is set to switch filter::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x100 / end actions queue index 1 / end
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / gtp_psc qfi is 0x5 / end actions queue index 2 / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions queue index 1 / end
 
-   the two flows can not be created successfully, report proper error message.
+   send same packet, it is redirected to queue 1, because the packet match switch filter first.
 
-2. list the flow::
 
-    testpmd> flow list 0
+Test case: count/query
+======================
 
-   there is no flow listed.
+Subcase 1: count for 1 rule of 1 port
+-------------------------------------
 
-Test case: MAC_IPV4_GTPU wrong parameters
-=========================================
+1. create filter rules::
 
-1. create filter rules on port 0::
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / count / end
 
-    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x100000000 / end actions queue index 1 / end
+2. send matched packets, check the packets are redirected to queue 1.
+   send mismatched packets, check the packets are redirected by RSS.
+   check the count number::
 
-   the flow can not be created successfully.
+    flow query 0 0 count
+    count:
+     hits_set: 1
+     bytes_set: 0
+     hits: 2
+     bytes: 0
 
-2. list the flow::
+3. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   there is no flow listed.
+   check the existing rule.
+   destroy the rule::
+
+    testpmd> flow destroy 0 rule 0
+
+   verify matched packets are redirected by RSS.
+   check there is no rule listed.
+
+4.  check the count number::
 
-Test case: count query identifier share
-=======================================
+     testpmd> flow query 0 0 count
+     Flow rule #0 not found
+
+Subcase 2: count query identifier share
+---------------------------------------
 
 1. create filter rules::
 
     flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 / end actions queue index 1 / count identifier 0x1234 shared on / end
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions queue index 2 / count identifier 0x1234 shared on / end
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 / end actions queue index 3 / count identifier 0x1234 shared off / end
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.4 / end actions queue index 4 / count identifier 0x1234 / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions rss queues 2 3 end / count identifier 0x1234 shared on / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 / end actions passthru / mark / count identifier 0x1234 shared off / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.4 / end actions mark id 1 / rss / count identifier 0x1234 / end
     flow create 0 ingress pattern eth / ipv4 src is 192.168.0.5 / end actions queue index 5 / count shared on / end
     flow create 0 ingress pattern eth / ipv4 src is 192.168.0.6 / end actions drop / count shared on / end
     flow create 0 ingress pattern eth / ipv4 src is 192.168.0.7 / end actions drop / count identifier 0x1235 shared on / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.8 / end actions rss / count / end
 
 2. send matched packets::
 
@@ -2887,10 +2042,15 @@ Test case: count query identifier share
     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.5",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.6",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.7",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.8",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
 
    check the packets,
-   packet 1 to queue 1, packet 2 to queue 2, packet 3 to queue 3, packet 4 to queue 4, packet 5 to queue 5,
+   packet 1 to queue 1, packet 2 to queue 2 or queue 3,
+   packet 3 is distributed by RSS with FDIR matched ID=0x0,
+   packet 4 is distributed by RSS with FDIR matched ID=0x1,
+   packet 5 to queue 5,
    packet 6 dropped, packet 7 dropped.
+   packet 8 is distributed by RSS.
 
 3. query count::
 
@@ -2936,6 +2096,12 @@ Test case: count query identifier share
      bytes_set: 0
      hits: 10
      bytes: 0
+    testpmd> flow query 0 7 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+     bytes: 0
 
 4. verify rules can be listed and destroyed::
 
@@ -2946,21 +2112,23 @@ Test case: count query identifier share
 
     testpmd> flow flush 0
 
-   verify matched packet are not distributed to same queue.
-   check there is no rule listed.
+5. check there is no rule listed,
+   send matched packets, query count, flow rule not found.
 
-Test case: multi patterns count query
-=====================================
+Subcase 3: multi patterns mark count query
+------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / count / end
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / count / end
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions rss queues 62 63 end / count / end
-    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queue index 1 / count / end
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 3 / count / end
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 / tcp dst is 23 / end actions queue index 4 / count / end
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 5 / count / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 0 / count / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / mark id 1 / count / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions rss queues 62 63 end / mark id 2 / count / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queue index 1 / mark id 3 / count / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 3 / mark id 4 / count / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 / tcp dst is 23 / end actions queue index 4 / count / mark id 5 / end
+    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 5 / mark id 6 / count / end
+    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / end actions rss queues 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 \
+    32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 end / mark id 100 / count / end
 
 2. send matched packets::
 
@@ -2971,10 +2139,12 @@ Test case: multi patterns count query
     sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP(dport=4790)/VXLAN(flags=0xc)/IP(dst="192.168.0.21", src="192.168.0.20")/UDP(sport=22,dport=23)/("X"*480)], iface="enp175s0f0", count=10)
     sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=2)/Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20")/TCP(dport=23)/("X"*480)], iface="enp175s0f0", count=10)
     sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=2)/Ether()/IP(src='192.168.0.20', dst='192.168.0.21')/SCTP(sport=22,dport=23)/("X"*480)], iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP()/Raw('x'*20)], iface="enp175s0f0", count=10)
 
    check the packets,
    packet 1 to queue 1, packet 2 dropped, packet 3 to queue 62-63, packet 4 to queue 1, packet 5 to queue 3,
-   packet 6 to queue 4, packet 7 to queue 5.
+   packet 6 to queue 4, packet 7 to queue 5, packet 8 is distributed by RSS.
+   all the packets are received with FDIR matched ID.
 
 3. query count::
 
@@ -3020,630 +2190,423 @@ Test case: multi patterns count query
      bytes_set: 0
      hits: 10
      bytes: 0
+    testpmd> flow query 0 7 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+     bytes: 0
 
-4. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   There are 7 rules listed.
-   destroy the rule 0::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify the packet matching rule 0 is not distributed to queue 1.
-   check rule 1-6 listed.
-
-5. destroy the rule 6::
-
-    testpmd> flow destroy 0 rule 6
-
-   verify the packet matching rule 6 is not distributed to queue 5.
-   check rule 1-5 listed.
-
-6. destroy the rule 3::
-
-    testpmd> flow destroy 0 rule 3
-
-   verify the packet matching rule 3 is not distributed to queue 1.
-   check rule 1/2/4/5 listed.
-
-7. flush the all the rules::
-
-    testpmd> flow flush 0
-
-   verify the matched packets are not distributed to the same queue.
-   check no rule listed.
-
-Test case: two ports multi patterns count query
-===============================================
-
-1. create filter rules::
-
-    flow create 1 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 255  tos is 4 / end actions queue index 1 / count / end
-    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions rss queues 6 7 end / count / end
-    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions rss queues 6 7 end / count / end
-    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions queue index 2 / count / end
-    flow create 1 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / count / end
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 tos is 4 / tcp src is 22 dst is 23 / end actions drop / count / end
-    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queue index 1 / count / end
-
-2. send matched packets::
-
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=255, ttl=2, tos=4) / Raw('x' * 80)],iface="enp175s0f1", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/SCTP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/UDP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/TCP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN()/Ether()/IP(src='192.168.0.20', dst='192.168.0.21')/("X"*480)], iface="enp175s0f1", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2, tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f0", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", nh=0, tc=1, hlim=2)/("X"*480)], iface="enp175s0f0", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2, tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f1", count=10)
-
-   check the packets,
-   packet 1 to queue 1 of port 1, packet 2 to queue 6-7 of port 1, packet 3 to queue 6-7 of port 1,
-   packet 4 to queue 2 of port 1, packet 5 dropped of port 1,
-   packet 6 to dropped of port 0, packet 7 to queue 1 of port 0.
-   packet 8 received by port 1.
-
-3. query count::
-
-    testpmd> flow query 1 0 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-    testpmd> flow query 1 1 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-    testpmd> flow query 1 2 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-    testpmd> flow query 1 3 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-    testpmd> flow query 1 4 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-    testpmd> flow query 0 0 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-    testpmd> flow query 0 1 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-
-4. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-    testpmd> flow list 1
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow flush 0
-    testpmd> flow flush 1
-
-   verify matched packet are not distributed to same queue.
-   check there is no rule listed::
-
-    testpmd> flow list 0
-    testpmd> flow list 1
-
-Test case: max count
-====================
-
-1. create 257 flows with count::
-
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 / end actions drop / count / end
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions drop / count / end
-    ……
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 / end actions drop / count / end
-    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.2 / end actions drop / count / end
-
-   the last one failed to create.
-
-2. send matched packets::
-
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
-
-   check the packet dropped.
-
-3. query count::
-
-    testpmd> flow query 0 255 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 10
-     bytes: 0
-
-4. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow flush 0
-
-   verify matched packet are not dropped.
-   check there is no rule listed.
-
-Test case: MAC_IPV4_PAY queue index mark
-========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / mark id 0 / end
-
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x0" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_UDP queue index mark
-========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions queue index 0 / mark id 1 / end
-
-2. send 1 matched packet, check the packets are distributed to queue 0 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 0 without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_TCP queue index mark
-========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 4294967294 / end
-
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0xfffffffe" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
+4. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
    check the existing rule.
    destroy the rule::
 
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_SCTP drop mark
-==================================
-
-1. create filter rules::
+    testpmd> flow flush 0
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 tag is 1 / end actions drop / mark id 1 / end
+5. check there is no rule listed,
+   send matched packets, query count, flow rule not found.
 
-2. send 1 matched packet, check the packets are dropped.
-   send 1 mismatched packet, check the packets are not dropped without "FDIR matched" printed.
+Subcase 4: max count number
+---------------------------
 
-3. verify rules can be listed and destroyed::
+1. create 257 flows with count::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 / end actions drop / count / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 / end actions drop / count / end
+    ……
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.255 / end actions drop / count / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1 / end actions drop / count / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.1.2 / end actions drop / count / end
 
-   check the existing rule.
-   destroy the rule::
+   the last one failed to create, report the error message::
 
-    testpmd> flow destroy 0 rule 0
+    No free counter found
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+2. send matched packets::
 
-Test case: MAC_IPV6_PAY queue index mark
-========================================
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.1.1",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0", count=10)
 
-1. create filter rules::
+   check the packet dropped.
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop is 2 tc is 1 / end actions queue index 1 / mark id 1 / end
+3. query count::
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+    testpmd> flow query 0 255 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+     bytes: 0
 
-3. verify rules can be listed and destroyed::
+4. verify rules can be listed and destroyed::
 
     testpmd> flow list 0
 
-   check the existing rule.
+   check that 256 rules listed.
    destroy the rule::
 
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV6_UDP queue index mark
-========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
-
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
+    testpmd> flow flush 0
 
-    testpmd> flow list 0
+   verify matched packet are not dropped.
+   check there is no rule listed.
 
-   check the existing rule.
-   destroy the rule::
+Test case: two ports
+====================
 
-    testpmd> flow destroy 0 rule 0
+Subcase 1: same rule on two ports
+---------------------------------
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+1. create filter rules on two ports::
 
-Test case: MAC_IPV6_TCP queue index mark
-========================================
+    flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / mark / end
+    flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / mark / end
 
-1. create filter rules::
+   send matched packets::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+    p_gtpu1 = Ether(src="a4:bf:01:51:27:ca", dst="00:11:22:33:44:55")/IP(src="192.168.0.20", dst="192.168.0.21")/UDP(dport=2152) \
+    /GTP_U_Header(gtp_type=255, teid=0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=0, qos_flow=0x34)/IP()/Raw('x'*20)
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+   send the packet to two ports, both are distributed to queue 1 with FDIR matched ID=0x0.
 
-3. verify rules can be listed and destroyed::
+2. list the rules on two ports::
 
     testpmd> flow list 0
+    ID      Group   Prio    Attr    Rule
+    0       0       0       i--     ETH IPV4 UDP GTPU GTP_PSC => QUEUE MARK
+    testpmd> flow list 1
+    ID      Group   Prio    Attr    Rule
+    0       0       0       i--     ETH IPV4 UDP GTPU GTP_PSC => QUEUE MARK
 
-   check the existing rule.
-   destroy the rule::
+3. destroy rule 0 on port 0::
 
     testpmd> flow destroy 0 rule 0
+    Flow rule #0 destroyed
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV6_SCTP queue index mark
-=========================================
-
-1. create filter rules::
-
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
-
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
+   list the rules on two ports::
 
     testpmd> flow list 0
+    testpmd> flow list 1
+    ID      Group   Prio    Attr    Rule
+    0       0       0       i--     ETH IPV4 UDP GTPU GTP_PSC => QUEUE MARK
 
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_IPV4_PAY queue index mark
-=================================================
-
-1. create filter rules::
+4. send the matched packet to port 0, it is redirected by RSS without FDIR matched ID.
+   send the matched packet to port 1, it is still redirected to queue 1 with FDIR matched ID=0x0.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark id 1 / end
+5. destroy rule 0 on port 1::
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+    testpmd> flow destroy 1 rule 0
+    Flow rule #0 destroyed
 
-3. verify rules can be listed and destroyed::
+   list the rules on two ports::
 
     testpmd> flow list 0
+    testpmd> flow list 1
 
-   check the existing rule.
-   destroy the rule::
+   there is no rule listed on both ports.
+   send the matched packet to port 0/1, it is redirected by RSS without FDIR matched ID.
 
-    testpmd> flow destroy 0 rule 0
+Subcase 2: same input set, different actions on two ports
+---------------------------------------------------------
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+1. create filter rules on two ports::
 
-Test case: MAC_IPV4_TUN_IPV4_UDP queue group mark
-=================================================
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+    flow create 1 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 2 3 end / mark id 1 / end
 
-1. create filter rules::
+   send matched packets to two ports::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions rss queues 1 2 end / mark id 1 / end
+    pkt = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/TCP(sport=22,dport=23)/Raw('x' * 80)
 
-2. send 1 matched packet, check the packets are distributed to queue 1-2 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1-2 without "FDIR matched" printed.
+   the packet sent to port 0 is redirected to queue 1 with FDIR matched ID=0x1,
+   the packet sent to port 1 is redirected to queue 2 or queue 3 with FDIR matched ID=0x1.
 
-3. verify rules can be listed and destroyed::
+2. destroy rule 0 on both ports::
 
-    testpmd> flow list 0
+    testpmd> flow flush 0
+    testpmd> flow flush 1
 
-   check the existing rule.
-   destroy the rule::
+   list the rules on two ports::
 
-    testpmd> flow destroy 0 rule 0
+    testpmd> flow list 0
+    testpmd> flow list 1
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+   there is no rule listed on both ports.
+   send the matched packet to port 0/1, it is redirected by RSS without FDIR matched ID.
 
-Test case: MAC_IPV4_TUN_IPV4_TCP drop mark
-==========================================
+Subcase 3: two ports multi patterns count query
+-----------------------------------------------
 
 1. create filter rules::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions drop / mark id 1 / end
-
-2. send 1 matched packet, check the packets are dropped.
-   send 1 mismatched packet, check the packets are not dropped without "FDIR matched" printed.
-
-3. verify rules can be listed and destroyed::
-
-    testpmd> flow list 0
-
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
+    flow create 1 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 255  tos is 4 / end actions queue index 1 / mark id 1 / count identifier 0x1234 shared on / end
+    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / sctp src is 22 dst is 23 / end actions rss queues 6 7 end / mark id 2 / count identifier 0x1234 shared on / end
+    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / udp src is 22 dst is 23 / end actions rss queues 6 7 end / mark id 1 / count / end
+    flow create 1 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 / tcp src is 22 dst is 23 / end actions queue index 2 / mark / count / end
+    flow create 1 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / count / end
+    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 tos is 4 / tcp src is 22 dst is 23 / end actions drop / count / end
+    flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queue index 1 / mark id 1 / count identifier 0x1234 shared on / end
 
-   verify matched packets are dropped without "FDIR matched" printed.
-   Then check there is no rule listed.
+2. send matched packets::
 
-Test case: MAC_IPV4_TUN_IPV4_SCTP queue index mark
-==================================================
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=255, ttl=2, tos=4) / Raw('x' * 80)],iface="enp175s0f1", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/SCTP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/UDP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", tc=1, hlim=2)/TCP(sport=22,dport=23)/("X"*480)], iface="enp175s0f1", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP()/UDP()/VXLAN()/Ether()/IP(src='192.168.0.20', dst='192.168.0.21')/("X"*480)], iface="enp175s0f1", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2, tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", nh=0, tc=1, hlim=2)/("X"*480)], iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(dst="192.168.0.21", ttl=2, tos=4)/TCP(sport=22,dport=23)/Raw(load="X"*480)], iface="enp175s0f1", count=10)
 
-1. create filter rules::
+   check the packets,
+   packet 1 to queue 1 of port 1, packet 2 to queue 6-7 of port 1, packet 3 to queue 6-7 of port 1,
+   packet 4 to queue 2 of port 1, packet 5 dropped of port 1,
+   packet 6 to dropped of port 0, packet 7 to queue 1 of port 0.
+   packet 8 received by port 1.
+   all the received packets have specified FDIR matched ID.
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+3. query count::
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+    testpmd> flow query 1 0 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 20
+     bytes: 0
+    testpmd> flow query 1 1 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 20
+     bytes: 0
+    testpmd> flow query 1 2 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+    testpmd> flow query 1 3 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+     bytes: 0
+    testpmd> flow query 1 4 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+     bytes: 0
+    testpmd> flow query 0 0 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
+    testpmd> flow query 0 1 count
+    COUNT:
+     hits_set: 1
+     bytes_set: 0
+     hits: 10
 
-3. verify rules can be listed and destroyed::
+4. verify rules can be listed correctly::
 
     testpmd> flow list 0
+    testpmd> flow list 1
 
-   check the existing rule.
-   destroy the rule::
+5. destroy the rule::
 
-    testpmd> flow destroy 0 rule 0
+    testpmd> flow flush 0
+    testpmd> flow flush 1
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+   verify matched packet are received without FDIR matched ID.
+   check there is no rule listed::
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_PAY queue index mark
-=====================================================
+    testpmd> flow list 0
+    testpmd> flow list 1
 
-1. create filter rules::
+   query the count number, all reported::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark id 1 / end
+    Flow rule #[ID] not found
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+Test case: Stress test
+======================
 
-3. verify rules can be listed and destroyed::
+Subcase 1: port stop/port start/port reset
+------------------------------------------
 
-    testpmd> flow list 0
+1. create a rule::
 
-   check the existing rule.
-   destroy the rule::
+    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark / end
 
-    testpmd> flow destroy 0 rule 0
+2. list the rule and send matched packet::
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21") / Raw('x' * 80)],iface="enp175s0f0")
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_UDP queue index mark
-=====================================================
+   check the packet are redirected to queue 1 with FDIR matched ID=0x0
 
-1. create filter rules::
+3. stop the port, then start the port::
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+    testpmd> port stop 0
+    testpmd> port start 0
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+4. show the rule list, the rule is still there.
 
-3. verify rules can be listed and destroyed::
+5. verify matched packet can be still redirected to queue 1 with FDIR matched ID=0x0.
 
-    testpmd> flow list 0
+6. reset pf::
 
-   check the existing rule.
-   destroy the rule::
+    testpmd> port stop 0
+    testpmd> port reset 0
+    testpmd> port start 0
 
-    testpmd> flow destroy 0 rule 0
+7. show the rule list, the rule is still there.
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+8. verify matched packet can be still redirected to queue 1 with FDIR matched ID=0x0.
 
+Subcase 2: add/delete rules
+---------------------------
 
-Test case: MAC_IPV4_TUN_MAC_IPV4_TCP queue index mark
-=====================================================
+1. create two rules::
 
-1. create filter rules::
+    flow create 0 ingress pattern eth / ipv4 proto is 255 / end actions queue index 1 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 2 3 end / mark id 1 / end
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+   return the message::
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+    Flow rule #0 created
+    Flow rule #1 created
 
-3. verify rules can be listed and destroyed::
+   list the rules::
 
     testpmd> flow list 0
+    ID      Group   Prio    Attr    Rule
+    0       0       0       i--     ETH IPV4 => QUEUE MARK
+    1       0       0       i--     ETH IPV4 TCP => RSS MARK
 
-   check the existing rule.
-   destroy the rule::
-
-    testpmd> flow destroy 0 rule 0
-
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
-
-Test case: MAC_IPV4_TUN_MAC_IPV4_SCTP queue index mark
-======================================================
+2. delete the rules::
 
-1. create filter rules::
+    testpmd> flow flush 0
 
-    flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
+3. repeate the create and delete operations in step1-2 15360 times.
 
-2. send 1 matched packet, check the packets are distributed to queue 1 with "FDIR matched ID=0x1" printed.
-   send 1 mismatched packet, check the packets are not distributed to queue 1 without "FDIR matched" printed.
+4. create the two rules one more time, check the rules listed.
 
-3. verify rules can be listed and destroyed::
+5. send matched packet::
 
-    testpmd> flow list 0
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=255)/Raw('x' * 80)],iface="enp175s0f0")
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/TCP(sport=22,dport=23)/Raw('x' * 80)],iface="enp175s0f0")
 
-   check the existing rule.
-   destroy the rule::
+   check packet 1 is redirected to queue 1 with FDIR matched ID=0x0
+   check packet 2 is redirected to queue 2 or queue 3 with FDIR matched ID=0x1
 
-    testpmd> flow destroy 0 rule 0
+Subcase 3: delete rules
+-----------------------
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed.
+1. create 3 rules and destory the first rule::
 
-Test case: multirules mark
-==========================
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 24 / end actions queue index 2 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 25 / end actions queue index 3 / mark / end
 
-1. create filter rules::
+   there are rule 0/1/2 listed::
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 2 / mark id 1 / end
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst is 23 / end actions queue index 1 / mark id 2 / count / end
+    flow list 0
 
-2. send matched packet::
+   send packets match rule 0, rule 1 and rule 2,
+   Verify all packets can be redirected to expected queue and mark.
+   destory the first rule::
 
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw('x' * 80)],iface="enp175s0f0")
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /TCP(sport=22,dport=23)/Raw('x' * 80)],iface="enp175s0f0")
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /SCTP(sport=22,dport=23)/Raw('x' * 80)],iface="enp175s0f0")
+    flow destroy 0 rule 0
 
-   check packet 1 to queue 1 with "FDIR matched ID=0x1" printed.
-   packet 2 to queue 2 with "FDIR matched ID=0x1" printed.
-   packet 3 to queue 1 with "FDIR matched ID=0x2" printed.
+   list the rules, verify there are only rule 1 and rule 2 listed.
+   send packet matched rule 0, verify it is received without FDIR matched ID.
+   send packets matched rule 1 and rule 2, Verify all packets be redirected and mark.
+   flush rules::
 
-3. query count::
+    flow flush 0
 
-    testpmd> flow query 0 2 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 1
-     bytes: 0
+   send packets match rule 0, rule 1 and rule 2, verify all packets can not mark.
 
-4. verify rules can be listed and destroyed::
+2. create 3 rules and destory the second rule::
 
-    testpmd> flow list 0
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 24 / end actions queue index 2 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 25 / end actions queue index 3 / mark / end
 
-   check 3 rules listed.
-   destroy the rule 0::
+   there are rule 0/1/2 listed::
 
-    testpmd> flow destroy 0 rule 0
+    flow list 0
 
-   verify packet 1 is distributed to different queue without "FDIR matched" printed.
-   Then check there is 2 rules listed.
-   packet 2 to queue 2 with "FDIR matched ID=0x1" printed.
-   packet 3 to queue 1 with "FDIR matched ID=0x2" printed.
-   query count::
+   send packets match rule 0, rule 1 and rule 2,
+   Verify all packets can be redirected to expected queue and mark.
+   destory the second rule::
 
-    testpmd> flow query 0 2 count
-    COUNT:
-     hits_set: 1
-     bytes_set: 0
-     hits: 2
-     bytes: 0
+    flow destroy 0 rule 1
 
+   list the rules, verify there are only rule 0 and rule 2 listed.
+   send packet matched rule 1, verify it is received without FDIR matched ID.
+   send packets matched rule 0 and rule 2, Verify all packets be redirected and mark.
    flush rules::
 
-    testpmd> flow flush 0
+    flow flush 0
 
-   verify matched packets are distributed to different queue without "FDIR matched" printed.
-   Then check there is no rule listed, and no count exist.
+   send packets match rule 0, rule 1 and rule 2, verify all packets can not mark.
 
-Test case: mark wrong parameters
-================================
+3. create 3 rules and destory the third rule::
 
-1. create filter rules::
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 24 / end actions queue index 2 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.56.0 dst is 192.1.0.0 tos is 4 / tcp src is 22 dst is 25 / end actions queue index 3 / mark / end
 
-    flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 / end actions queue index 1 / mark id 4294967296 / end
+   there are rule 0/1/2 listed::
 
-   the flow failed to be created.
+    flow list 0
 
-2. list the flow::
+   send packets match rule 0, rule 1 and rule 2,
+   Verify all packets can be redirected to expected queue and mark.
+   destory the last rule::
 
-    testpmd> flow list 0
+    flow destroy 0 rule 2
 
-   Then check there is no rule listed.
+   list the rules, verify there are only rule 0 and rule 1 listed.
+   send packet matched rule 2, verify it is received without FDIR matched ID.
+   send packets matched rule 0 and rule 1, Verify all packets be redirected and mark.
+   flush rules::
 
-Test case: pattern conflict flow
-================================
+    flow flush 0
 
-MAC_IPV4_PAY and MAC_IPV4_UDP are conflict patterns.
-so if create one, then create the other one, the second flow will be
-set to switch filer.
-IPV4_UDP packet can match MAC_IPV4_PAY rule.
-but IPV4_PAY packet cannot match MAC_IPV4_UDP rule.
+   send packets match rule 0, rule 1 and rule 2, verify all packets can not mark.
 
-1. set MAC_IPV4_PAY firstly::
+Subcase 4: max rules
+--------------------
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions queue index 1 / end
+1. create 15360 rules on port 0::
 
-   the first flow is set to fdir filter, send matched packet::
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is 192.168.0.0 / end actions queue index 1 / mark / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is 192.168.0.1 / end actions queue index 1 / mark / end
+    ......
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is 192.168.59.255 / end actions queue index 1 / mark / end
 
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21")/Raw('x' * 80)],iface="enp175s0f0", count=10)
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
+   all the rules are created successfully.
 
-   the two type packets both to queue 1.
-   then create MAC_IPV4_UDP flow, it is set to switch filer::
+2. create one more rule::
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 2 / end
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.100.20 dst is 192.168.60.0 / end actions queue index 1 / mark / end
 
-   send same packets, IPV4_PAY packet to queue 1, IPV4_UDP packet to queue 2.
+   the rule failed to create. return the error message::
 
-2. set MAC_IPV4_UDP firstly::
+    Failed to create flow
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 2 / end
+3. check the rule list, there are 15360 rules listed.
 
-   send matched packet::
+4. send matched packets for rule 0 and rule 15359::
 
-    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21") /UDP(sport=22, dport=23)/ Raw('x' * 80)],iface="enp175s0f0", count=10)
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.100.20",dst="192.168.0.0")/Raw('x' * 80)],iface="enp175s0f0")
+    sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.100.20",dst="192.168.59.255")/Raw('x' * 80)],iface="enp175s0f0")
 
-   packet to queue 2.
-   then create MAC_IPV4_PAY flow::
+   check all packets are redirected to expected queue with FDIR matched ID=0x0
 
-    flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / end actions queue index 1 / end
+5. flush all the rules, check the rule list,
+   there is no rule listed.
 
-   send same packet, packet to queue 1, because the packet match switch filter first.
+6. verify matched packets for rule 0 and rule 15359 received without FDIR matched ID.
-- 
2.7.4


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

end of thread, other threads:[~2020-04-01  5:55 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-01  7:51 [dts] [PATCH v2]test_plans: rework case struction Peng Yuan
2020-04-01  5:54 ` Tu, Lijuan

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