From: Nannan Lu <nannan.lu@intel.com>
To: dts@dpdk.org
Cc: Nannan Lu <nannan.lu@intel.com>
Subject: [dts] [PATCH V2] test_plans: add CVL switch filter test cases for generic_flow_api
Date: Wed, 4 Dec 2019 20:24:19 +0000 [thread overview]
Message-ID: <20191204202419.37795-1-nannan.lu@intel.com> (raw)
Add CVL switch filter non-pipeline mode
vxlan/nvgre/pppoed/pppoes and pipeline
mode vxlan/nvgre/non-tunnel to generic_flow_api.rst.
Signed-off-by: Nannan Lu <nannan.lu@intel.com>
---
test_plans/generic_flow_api_test_plan.rst | 6872 ++++++++++++++++++++-
1 file changed, 6796 insertions(+), 76 deletions(-)
diff --git a/test_plans/generic_flow_api_test_plan.rst b/test_plans/generic_flow_api_test_plan.rst
index 380d9e8..00e977c 100644
--- a/test_plans/generic_flow_api_test_plan.rst
+++ b/test_plans/generic_flow_api_test_plan.rst
@@ -1,4 +1,4 @@
-.. Copyright (c) <2016>, Intel Corporation
+.. Copyright (c) <2019>, Intel Corporation
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,7 @@ Prerequisites
=============
1. Hardware:
- Fortville and Niantic
+ Fortville, Niantic and Columbiaville
2. software:
dpdk: http://dpdk.org/git/dpdk
@@ -539,111 +539,6831 @@ Test case: Fortville tunnel vxlan
testpmd> flow list 0
+Test case: CVL tunnel vxlan
+===========================
+
+1. Launch the app ``testpmd`` with the following arguments, and
+ create 16384 rules to make the fdir table full. The 16384 rules
+ are in the testpmd_cmds file::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 -w 0000:18:00.2 \
+ --log-level="ice,8" -- -i --txq=8 --rxq=8 --cmdline-file=testpmd_cmds
+ testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+ testpmd> rx_vxlan_port add 4789 0
+ testpmd> set fwd rxonly
+ testpmd> set verbose 1
+ testpmd> start
+
+ the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_ipv4_vxlan_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5",frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions rss queues 4 5 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23) \
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23) \
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19) \
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions rss queues 1 2 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23) \
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1 or 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23) \
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19) \
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1 and 2
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23) \
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23) \
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19) \
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions queue index 5 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)\
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=29,dport=23)\
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=20)\
+ /Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 5
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=29,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=20)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=29,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=20)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=19)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=19)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=19)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions queue index 2 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.4", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.5" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.4", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.5" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.4", dst="192.168.0.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.5" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.4", dst="192.168.0.3") /TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.5") /TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions rss queues 4 5 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.4", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.5")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.4", dst="192.168.0.3")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.5")/TCP()/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=29)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=29)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=29)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=20,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=19)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions rss queues 1 2 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1 or 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=20,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=19)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1 and 2
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=20,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=19)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=29)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=29)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=29)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_mac_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / icmp / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+ testpmd> flow list 0
+ testpmd> flow flush 0
+ testpmd> flow list 0
+
+
+Test case: CVL tunnel vxlan pipeline mode
+=========================================
+
+1. Launch the app ``testpmd`` with the following arguments::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \
+ -w 0000:18:00.2,pipeline-mode-support=1 --log-level="ice,8" \
+ -- -i --txq=8 --rxq=8
+ testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+ testpmd> rx_vxlan_port add 4789 0
+ testpmd> set fwd rxonly
+ testpmd> set verbose 1
+ testpmd> start
+
+ the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_ipv4_vxlan_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions queue index 2 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue and 3
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_vxlan_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=19,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=19,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=19,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=30)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=19,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=9)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=19,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=9)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=19,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=9)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x05)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x05)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x05)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_vxlan_ipv6_frag (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions queue index 2 / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions rss queues 2 3 end / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions drop / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv6_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_vxlan_ipv6_udp_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions rss queues 1 2 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1 or 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1 and 2
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv6_tcp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv6_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_vxlan_ipv6_icmpv6 (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x01)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x02)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x01)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x02)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x01)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x02)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+ testpmd> flow list 0
+ testpmd> flow flush 0
+ testpmd> flow list 0
+
+
Test case: Fortville tunnel nvgre
=================================
- Prerequisites:
+ Prerequisites:
+
+ add two vfs on dpdk pf, then bind the vfs to vfio-pci::
+
+ echo 2 >/sys/bus/pci/devices/0000:05:00.0/max_vfs
+ ./usertools/dpdk-devbind.py -b vfio-pci 05:02.0 05:02.1
+
+1. Launch the app ``testpmd`` with the following arguments::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -w 05:00.0 --file-prefix=pf --socket-mem=1024,1024 -- -i --rxq=16 --txq=16 --tx-offloads=0x8fff
+ testpmd> set fwd rxonly
+ testpmd> set verbose 1
+ testpmd> set promisc all off
+ testpmd> start
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e0000 -n 4 -w 05:02.0 --file-prefix=vf0 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff
+ testpmd> set fwd rxonly
+ testpmd> set verbose 1
+ testpmd> set promisc all off
+ testpmd> start
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e00000 -n 4 -w 05:02.1 --file-prefix=vf1 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff
+ testpmd> set fwd rxonly
+ testpmd> set verbose 1
+ testpmd> set promisc all off
+ testpmd> start
+
+ the pf's mac address is 00:00:00:00:01:00
+ the vf0's mac address is 54:52:00:00:00:01
+ the vf1's mac address is 54:52:00:00:00:02
+
+2. create filter rules
+
+ inner mac + actions pf::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 1 / end
+
+ tni + inner mac + actions pf::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 2 / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 2 / end
+
+ inner mac + inner vlan + actions pf::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / vlan tci is 30 / end actions pf / queue index 3 / end
+
+ tni + inner mac + inner vlan + actions pf::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112244 / eth dst is 00:11:22:33:44:55 / vlan tci is 40 / end actions pf / queue index 4 / end
+
+ inner mac + outer mac + tni + actions pf::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112255 / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 5 / end
+
+ tni + inner mac + inner vlan + actions vf::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112266 / eth dst is 00:11:22:33:44:55 / vlan tci is 60 / end actions vf id 0 / queue index 1 / end
+
+ inner mac + outer mac + tni + actions vf::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112277 / eth dst is 00:11:22:33:44:55 / end actions vf id 1 / queue index 3 / end
+
+3. send packets::
+
+ pkt1 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+ pkt2 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=2)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+ pkt31 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=30)/IP()/TCP()/Raw('x' * 20)
+ pkt32 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=31)/IP()/TCP()/Raw('x' * 20)
+ pkt4 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112244)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=40)/IP()/TCP()/Raw('x' * 20)
+ pkt51 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+ pkt52 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112256)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+ pkt53 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+ pkt54 = Ether(dst="00:11:22:33:44:77")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+ pkt55 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
+ pkt56 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
+ pkt61 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
+ pkt62 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
+ pkt63 = Ether(dst="54:52:00:00:00:01")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
+ pkt64 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
+ pkt71 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+ pkt72 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
+ pkt73 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
+ pkt74 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
+
+ verify pkt1 received by pf queue 1, pkt2 to pf queue 2,
+ pkt31 to pf queue 3, pkt32 to pf queue 1, pkt4 to pf queue 4,
+ pkt51 to pf queue 5, pkt52 to pf queue 1, pkt53 to pf queue 1,
+ pkt54 to pf queue 1, pkt55 to pf queue 0, pf can't receive pkt56.
+ pkt61 to vf0 queue 1 and pf queue 1, pf and vf0 can't receive pkt62,
+ pkt63 to vf0 queue 0, pkt64 to pf queue 0, vf0 can't receive pkt64,
+ pkt71 to vf1 queue 3 and pf queue 1, pkt72 to pf queue 1, vf1 can't receive
+ pkt72, pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74.
+
+4. verify rules can be listed and destroyed::
+
+ testpmd> flow list 0
+ testpmd> flow destroy 0 rule 0
+
+ verify pkt51 to pf queue 5, pkt53 and pkt55 to pf queue 0,
+ pf can't receive pkt52,pkt54 and pkt56. pkt71 to vf1 queue 3,
+ pkt72 and pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74.
+ Then::
+
+ testpmd> flow flush 0
+ testpmd> flow list 0
+
+
+Test case: CVL tunnel nvgre
+===========================
+
+1. Launch the app ``testpmd`` with the following arguments, and create
+ 16384 rules to make the fdir table full. The 16384 rules are in the
+ testpmd_cmds file::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 -w 0000:18:00.2 \
+ --log-level="ice,8" -- -i --txq=8 --rxq=8 --cmdline-file=testpmd_cmds
+ testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+ testpmd> set fwd rxonly
+ testpmd> set verbose 1
+ testpmd> start
+
+ the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_ipv4_nvgre_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x' * 80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+ Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+ Raw('x'*80)], iface="enp27s0f2", count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19)/\
+ Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions rss queues 1 2 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+ Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet to queue 1 and 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+ Raw('x'*80)], iface="enp27s0f2", count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19)/\
+ Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not to queue 1 and 2
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\
+ Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\
+ Raw('x'*80)], iface="enp27s0f2", count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19)/\
+ Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=20,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=39)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions rss queues 1 2 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" )/TCP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1 or 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=20,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=39)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 1 and 2
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3" )/TCP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=20,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=39)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=1,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=20)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=1,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=20)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=1,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=20)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/ICMP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/ICMP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/ICMP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_nvgre_mac_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_mac_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a9")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\
+ iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_mac_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP(sport=25,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP(sport=2,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP(sport=25,dport=20)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / udp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP(sport=25,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP(sport=2,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP(sport=25,dport=20)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP(sport=25,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP(sport=2,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP(sport=25,dport=20)/Raw('x'*80)], iface="enp27s0f2", count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_mac_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_mac_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packets::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_mac_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\
+ Ether(dst="68:05:ca:8d:ed:a8")/\
+ IP(src="192.168.1.2", dst="192.168.1.3")/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+ testpmd> flow list 0
+ testpmd> flow flush 0
+ testpmd> flow list 0
+
+
+Test case: CVL tunnel nvgre pipeline mode
+=========================================
+
+1. Launch the app ``testpmd`` with the following arguments::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \
+ -w 0000:18:00.2,pipeline-mode-support=1 --log-level="ice,8" \
+ -- -i --txq=8 --rxq=8
+ testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+ testpmd> set fwd rxonly
+ testpmd> set verbose 1
+ testpmd> start
+
+ the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_ipv4_nvgre_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/TCP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/TCP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/TCP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/TCP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/TCP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_nvgre_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=20)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=20)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=20)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=3,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=20)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=3,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=20)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=3,dport=23)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=20)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=4,dport=23)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=10)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=4,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=25,dport=10)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/\
+ Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=4,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/\
+ Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=25,dport=10)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x04)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x04)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x04)/\
+ Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_nvgre_ipv6_frag (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions queue index 2 / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions rss queues 2 3 end / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions drop / end
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv6_PAY (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_nvgre_ipv6_udp_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv6_tcp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=7,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=7,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=7,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv6_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions queue index 5 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=39)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 5
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=39)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=39)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_nvgre_ipv6_icmpv6 (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP()/NVGRE()/Ether()/\
+ IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+ testpmd> flow list 0
+ testpmd> flow flush 0
+ testpmd> flow list 0
+
+
+Test case: CVL PPPoD
+====================
+
+1. Launch the app ``testpmd`` with the following arguments, and create \
+ 16384 rules to make the fdir table full. The 16384 rules are in the \
+ testpmd_cmds file::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \
+ -w 0000:18:00.2 --log-level="ice,8" -- -i --txq=8 --rxq=8 \
+ --cmdline-file=testpmd_cmds
+ testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+ testpmd> set fwd rxonly
+ testpmd> set verbose 1
+ testpmd> start
+
+ the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_pppod_pay
+
+1) distribute to a single queue
+
+create rules::
+
+ testpmd> flow create 0 ingress pattern eth type is 0x8863 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+ Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+ Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth type is 0x8863 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+ Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+ Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth type is 0x8863 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+ Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+ Raw('x' *80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+ testpmd> flow list 0
+ testpmd> flow flush 0
+ testpmd> flow list 0
+
+
+Test case: CVL PPPoE
+====================
+
+1. Launch the app ``testpmd`` with the following arguments, and create \
+ 16384 rules to make the fdir table full. The 16384 rules are in the \
+ testpmd_cmds file::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \
+ -w 0000:18:00.2 --log-level="ice,8" -- -i --txq=8 --rxq=8 \
+ --cmdline-file=testpmd_cmds
+ testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+ testpmd> set fwd rxonly
+ testpmd> set verbose 1
+ testpmd> start
+
+ the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_pppoe_pay
+
+1) distribute to a single queue
+
+create rules::
+
+ testpmd> flow create 0 ingress pattern eth type is 0x8864 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth type is 0x8864 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth type is 0x8864 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_pppoe_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify the packet to queue 1
+
+send mismatched packets::
+
+ sendp([Ether(dst="00:11:22:33:44:54",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify the packet not to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type= 0x8100)/\
+ Dot1Q(vlan=1,type= 0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether(dst="00:11:22:33:44:54",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify the packet not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether(dst="00:11:22:33:44:54",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify the packet not dropped
+
+mac_pppoe_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+send a mismatched packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=2,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=2,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=2,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_pppoe_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv4_sctp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv4_icmp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\
+ IP()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55", type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/TCP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 4 5 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/TCP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3 or 4 or 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/TCP()/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_sctp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/IPv6()/\
+ SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+mac_pppoe_ipv6_icmpv6
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 1
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end
+
+send a packet::
+
+ sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\
+ Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\
+ IPv6()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+3. verify rules can be listed and destroyed::
+
+ testpmd> flow list 0
+ testpmd> flow flush 0
+ testpmd> flow list 0
+
+
+Test case: CVL non-tunnel pipeline mode
+=======================================
+
+1. Launch the app ``testpmd`` with the following arguments::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \
+ -w 0000:18:00.2,pipeline-mode-support=1 --log-level="ice,8" \
+ -- -i --txq=8 --rxq=8
+ testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd
+ testpmd> set fwd rxonly
+ testpmd> set verbose 1
+ testpmd> start
+
+ the pf's mac address is 00:00:00:00:01:02
+
+2. create switch filter rules and verify
+
+mac_ipv4_frag
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=7,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+create a rule with partial fields::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions queue index 3 / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=7,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+create a rule with partial fields::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions rss queues 2 3 end / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=7,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+create a rule with partial fields::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions drop / end
+
+send a packet with complete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+send a packet with incomplete layers::
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_pay
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2 and 3
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP()/\
+ Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv4_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=2,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=2,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=2,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ UDP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=25,dport=7)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=25,dport=7)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ TCP(sport=25,dport=7)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ SCTP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv4_icmp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ ICMP(type=0x08)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ ICMP(type=0x08)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ ICMP(type=0x08)/Raw('x' * 80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\
+ ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv6_frag
+
+1) distribute to a single queue
+
+create a rule with src ipv6 + dst ipv6::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions queue index 5 / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 5
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 5
+
+create a rule with dst ipv6 + tc::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2027",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 3
+
+2) distribute to rss queue
+
+create a rule with src ipv6 + dst ipv6::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions rss queues 2 3 end / end
- add two vfs on dpdk pf, then bind the vfs to vfio-pci::
+send a packet::
- echo 2 >/sys/bus/pci/devices/0000:05:00.0/max_vfs
- ./usertools/dpdk-devbind.py -b vfio-pci 05:02.0 05:02.1
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
-1. Launch the app ``testpmd`` with the following arguments::
+verify this packet to queue 2 or 3
- ./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -w 05:00.0 --file-prefix=pf --socket-mem=1024,1024 -- -i --rxq=16 --txq=16 --tx-offloads=0x8fff
- testpmd> set fwd rxonly
- testpmd> set verbose 1
- testpmd> set promisc all off
- testpmd> start
+send mismatched packets::
- ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e0000 -n 4 -w 05:02.0 --file-prefix=vf0 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff
- testpmd> set fwd rxonly
- testpmd> set verbose 1
- testpmd> set promisc all off
- testpmd> start
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
- ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e00000 -n 4 -w 05:02.1 --file-prefix=vf1 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff
- testpmd> set fwd rxonly
- testpmd> set verbose 1
- testpmd> set promisc all off
- testpmd> start
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
- the pf's mac address is 00:00:00:00:01:00
- the vf0's mac address is 54:52:00:00:00:01
- the vf1's mac address is 54:52:00:00:00:02
+verify these packets not to queue 2 and 3
-2. create filter rules
+create a rule with dst ipv6 + tc::
- inner mac + actions pf::
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end
- testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 1 / end
+send a packet::
- tni + inner mac + actions pf::
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
- testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 2 / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 2 / end
+verify this packet to queue 2 or 3
- inner mac + inner vlan + actions pf::
+send mismatched packets::
- testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / vlan tci is 30 / end actions pf / queue index 3 / end
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2027",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
- tni + inner mac + inner vlan + actions pf::
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
- testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112244 / eth dst is 00:11:22:33:44:55 / vlan tci is 40 / end actions pf / queue index 4 / end
+verify these packets not to queue 2 and 3
- inner mac + outer mac + tni + actions pf::
+3) drop action
- testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112255 / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 5 / end
+create a rule with src ipv6 + dst ipv6::
- tni + inner mac + inner vlan + actions vf::
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions drop / end
- testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112266 / eth dst is 00:11:22:33:44:55 / vlan tci is 60 / end actions vf id 0 / queue index 1 / end
+send a packet::
- inner mac + outer mac + tni + actions vf::
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
- testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112277 / eth dst is 00:11:22:33:44:55 / end actions vf id 1 / queue index 3 / end
+verify this packet dropped
-3. send packets::
+send mismatched packets::
- pkt1 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
- pkt2 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=2)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
- pkt31 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=30)/IP()/TCP()/Raw('x' * 20)
- pkt32 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=31)/IP()/TCP()/Raw('x' * 20)
- pkt4 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112244)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=40)/IP()/TCP()/Raw('x' * 20)
- pkt51 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
- pkt52 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112256)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
- pkt53 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
- pkt54 = Ether(dst="00:11:22:33:44:77")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
- pkt55 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
- pkt56 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
- pkt61 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
- pkt62 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
- pkt63 = Ether(dst="54:52:00:00:00:01")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
- pkt64 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20)
- pkt71 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
- pkt72 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20)
- pkt73 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
- pkt74 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20)
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
- verify pkt1 received by pf queue 1, pkt2 to pf queue 2,
- pkt31 to pf queue 3, pkt32 to pf queue 1, pkt4 to pf queue 4,
- pkt51 to pf queue 5, pkt52 to pf queue 1, pkt53 to pf queue 1,
- pkt54 to pf queue 1, pkt55 to pf queue 0, pf can't receive pkt56.
- pkt61 to vf0 queue 1 and pf queue 1, pf and vf0 can't receive pkt62,
- pkt63 to vf0 queue 0, pkt64 to pf queue 0, vf0 can't receive pkt64,
- pkt71 to vf1 queue 3 and pf queue 1, pkt72 to pf queue 1, vf1 can't receive
- pkt72, pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74.
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
-4. verify rules can be listed and destroyed::
+verify these packets not dropped
- testpmd> flow list 0
- testpmd> flow destroy 0 rule 0
+create a rule with dst ipv6 + tc::
- verify pkt51 to pf queue 5, pkt53 and pkt55 to pf queue 0,
- pf can't receive pkt52,pkt54 and pkt56. pkt71 to vf1 queue 3,
- pkt72 and pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74.
- Then::
-
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2027",tc=3)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\
+ IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv6_pay (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions queue index 3 / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 3
+
+send a mismatched packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 3
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule for tcp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+create a rule for udp::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\
+ UDP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\
+ TCP()/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+mac_ipv6_udp_pay
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions queue index 5 / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 5
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=3,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=4)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 5
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=3,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=4)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=3,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ UDP(sport=25,dport=4)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these packets not dropped
+
+mac_ipv6_tcp
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not dropped
+
+mac_ipv6_sctp (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions queue index 4 / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=9)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not to queue 4
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2 or 3
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=9)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not to queue 2 and 3
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send mismatched packets::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ SCTP(sport=25,dport=9)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify these two packets not dropped
+
+mac_ipv6_icmpv6 (not support in 19.11)
+
+1) distribute to a single queue
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions queue index 2 / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 2
+
+send a mismatched packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x03)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 2
+
+2) distribute to rss queues
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions rss queues 4 5 end / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet to queue 4 or 5
+
+send a mismatched packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x03)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not to queue 4 and 5
+
+3) drop action
+
+create a rule::
+
+ testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions drop / end
+
+send a packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet dropped
+
+send a mismatched packet::
+
+ sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\
+ dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\
+ ICMP(type=0x03)/Raw('x'*80)],iface="enp27s0f2",count=1)
+
+verify this packet not dropped
+
+3. verify rules can be listed and destroyed::
+
+ testpmd> flow list 0
testpmd> flow flush 0
testpmd> flow list 0
--
2.17.1
reply other threads:[~2019-12-04 12:36 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191204202419.37795-1-nannan.lu@intel.com \
--to=nannan.lu@intel.com \
--cc=dts@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).