[dts] [PATCH v1] test_plans: add test plan of generic_flow_api

Liu, Yong yong.liu at intel.com
Wed Sep 6 05:46:12 CEST 2017


Yuan,
Please use rstcheck tool to make sure your test plan align to RST required syntax.
Besides that two comments below.

Thanks,
Marvin 

> -----Original Message-----
> From: dts [mailto:dts-bounces at dpdk.org] On Behalf Of Peng,Yuan
> Sent: Friday, September 01, 2017 11:47 AM
> To: dts at dpdk.org
> Cc: Peng, Yuan <yuan.peng at intel.com>
> Subject: [dts] [PATCH v1] test_plans: add test plan of generic_flow_api
> 
> From: Peng Yuan <yuan.peng at intel.com>
> 
> Signed-off-by: Peng Yuan <yuan.peng at intel.com>
> 
> diff --git a/test_plans/generic_flow_api_test_plan.rst
> b/test_plans/generic_flow_api_test_plan.rst
> new file mode 100644
> index 0000000..e8bd3b7
> --- /dev/null
> +++ b/test_plans/generic_flow_api_test_plan.rst
> @@ -0,0 +1,1226 @@
> +.. Copyright (c) <2016>, Intel Corporation
> +   All rights reserved.
> +
> +   Redistribution and use in source and binary forms, with or without
> +   modification, are permitted provided that the following conditions
> +   are met:
> +
> +   - Redistributions of source code must retain the above copyright
> +     notice, this list of conditions and the following disclaimer.
> +
> +   - Redistributions in binary form must reproduce the above copyright
> +     notice, this list of conditions and the following disclaimer in
> +     the documentation and/or other materials provided with the
> +     distribution.
> +
> +   - Neither the name of Intel Corporation nor the names of its
> +     contributors may be used to endorse or promote products derived
> +     from this software without specific prior written permission.
> +
> +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
> +   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
> +   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
> +   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
> +   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
> +   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> +   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> +   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> +   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
> +   OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +=======================
> +Generic filter/flow api
> +=======================
> +
> +Prerequisites
> +=============
> +
> +1. Hardware:
> +   Fortville and Niantic
> +
> +2. software:
> +   dpdk: http://dpdk.org/git/dpdk
> +   scapy: http://www.secdev.org/projects/scapy/
> +
> +3. bind the pf to dpdk driver:
> +   ./usertools/dpdk-devbind.py -b igb_uio 05:00.0
> +
> +Test Cases for I40e:
> +====================
> +

Please use formal test case format like "Test case: Fortville ethertype".

> +ethertype
> +=========
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=16 --
> txq=16
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +testpmd> flow validate 0 ingress pattern eth type is 0x0806 / end actions
> queue index 1 / end
> +testpmd> flow create 0 ingress pattern eth type is 0x0806 / end actions
> queue index 2 / end
> +testpmd> flow validate 0 ingress pattern eth type is 0x08bb / end actions
> queue index 16 / end
> +testpmd> flow create 0 ingress pattern eth type is 0x88bb / end actions
> queue index 3 / end
> +testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 type
> is 0x88e5 / end actions queue index 4 / end
> +testpmd> flow create 0 ingress pattern eth type is 0x8864 / end actions
> drop / end
> +testpmd> flow validate 0 ingress pattern eth type is 0x88cc / end actions
> queue index 5 / end
> +testpmd> flow create 0 ingress pattern eth type is 0x88cc / end actions
> queue index 6 / end
> +
> +the i40e don't support the 0x88cc eth type packet. so the last two
> commands failed.
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.1.1")
> +pkt2 = Ether(dst="00:11:22:33:44:55", type=0x88BB)/Raw('x' * 20)
> +pkt3 = Ether(dst="00:11:22:33:44:55", type=0x88e5)/Raw('x' * 20)
> +pkt4 = Ether(dst="00:11:22:33:44:55", type=0x8864)/Raw('x' * 20)
> +
> +verify pkt1 to queue 2, and pkt2 to queue 3, pkt3 to queue 4, pkt4
> dropped.
> +
> +3. verify rules can be listed and destoryed.
> +

Typo here.

> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +verify pkt1 to queue 0, and pkt2 to queue 3, pkt3 to queue 4,
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +verify pkt1 to queue 0, and pkt2 to queue 0, pkt3 to queue 0, pkt4 to
> queue 0.
> +testpmd> flow list 0
> +
> +
> +fdir for L2 payload
> +===================
> +
> +./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 --disable-rss --
> pkt-filter-mode=perfect
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 1 / end actions
> queue index 1 / end
> +testpmd> flow create 0 ingress pattern eth type is 0x0807 / end actions
> queue index 2 / end
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=1)/Raw('x' * 20)
> +pkt2 = Ether(dst="00:11:22:33:44:55", type=0x0807)/Dot1Q(vlan=1)/Raw('x'
> * 20)
> +pkt3 = Ether(dst="00:11:22:33:44:55", type=0x0807)/IP(src="192.168.0.5",
> dst="192.168.0.6")/Raw('x' * 20)
> +
> +check pkt1 to queue 1, pkt2 to queue 2, pkt3 to queue 2.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +fdir for flexbytes
> +==================
> +
> +./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 --disable-rss --
> pkt-filter-mode=perfect
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +1) l2-payload
> +testpmd> flow create 0 ingress pattern eth type is 0x0807 / raw relative
> is 1 pattern is ab / end actions queue index 1 / end
> +
> +2) ipv4-other
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 4095 / ipv4
> proto is 255 ttl is 40 / raw relative is 1 offset is 2 pattern is ab / raw
> relative is 1 offset is 10 pattern is abcdefghij / raw relative is 1
> offset is 0 pattern is abcd / end actions queue index 2 / end
> +
> +3) ipv4-udp
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is
> 2.2.2.5 / udp src is 22 dst is 23 / raw relative is 1 offset is 2 pattern
> is fhds / end actions queue index 3 / end
> +
> +4) ipv4-tcp
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is
> 2.2.2.5 tos is 4 ttl is 3 / tcp src is 32 dst is 33 / raw relative is 1
> offset is 2 pattern is hijk / end actions queue index 4 / end
> +
> +5) ipv4-sctp
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is
> 2.2.2.5 / sctp src is 42 / raw relative is 1 offset is 2 pattern is
> abcdefghijklmnop / end actions queue index 5 / end
> +
> +6) ipv6-tcp
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 1 / ipv6 src is
> 2001::1 dst is 2001::2 tc is 3 hop is 30 / tcp src is 32 dst is 33 / raw
> relative is 1 offset is 0 pattern is hijk / raw relative is 1 offset is 8
> pattern is abcdefgh / end actions queue index 6 / end
> +
> +7) spec-mask(not supportted now, 6wind will update lately)
> +restart testpmd, create new rules,
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is
> 2.2.2.5 / tcp src is 32 dst is 33 / raw relative is 1 offset is 2 pattern
> spec \x61\x62\x63\x64 pattern mask \x00\x00\xff\x01 / end actions queue
> index 7 / end
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="00:11:22:33:44:55",
> type=0x0807)/Raw(load="\x61\x62\x63\x64")
> +pkt2 =
> Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=4095)/IP(src="192.168.0.1",
> dst="192.168.0.2", proto=255,
> ttl=40)/Raw(load="xxabxxxxxxxxxxabcdefghijabcdefg")
> +pkt3 = Ether(dst="00:11:22:33:44:55")/IP(src="2.2.2.4",
> dst="2.2.2.5")/UDP(sport=22,dport=23)/Raw(load="fhfhdsdsfwef")
> +pkt4 = Ether(dst="00:11:22:33:44:55")/IP(src="2.2.2.4", dst="2.2.2.5",
> tos=4, ttl=3)/TCP(sport=32,dport=33)/Raw(load="fhhijk")
> +pkt5 = Ether(dst="00:11:22:33:44:55")/IP(src="2.2.2.4",
> dst="2.2.2.5")/SCTP(sport=42,dport=43,tag=1)/Raw(load="xxabcdefghijklmnopq
> rst")
> +pkt6 = Ether(dst="00:11:22:33:44:55")/IP(src="2.2.2.4",
> dst="2.2.2.5")/SCTP(sport=42,dport=43,tag=1)/Raw(load="xxabxxxabcddxxabcde
> fghijklmn")
> +pkt7 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=1)/IPv6(src="2001::1",
> dst="2001::2", tc=3,
> hlim=30)/TCP(sport=32,dport=33)/Raw(load="hijkabcdefghabcdefghijklmn")
> +
> +// pkt8-pkt10 are not supported now.
> +pkt8 = Ether(dst="00:11:22:33:44:55")/IP(src="2.2.2.4",
> dst="2.2.2.5")/TCP(sport=32,dport=33)/Raw(load="\x68\x69\x61\x62\x63\x64")
> +pkt9 = Ether(dst="00:11:22:33:44:55")/IP(src="2.2.2.4",
> dst="2.2.2.5")/TCP(sport=32,dport=33)/Raw(load="\x68\x69\x68\x69\x63\x74")
> +pkt10 = Ether(dst="00:11:22:33:44:55")/IP(src="2.2.2.4",
> dst="2.2.2.5")/TCP(sport=32,dport=33)/Raw(load="\x68\x69\x61\x62\x63\x65")
> +
> +check pkt1 to pkt5 are received by queue 1 to queue 5, pkt6 to queue 0,
> pkt7 to queue6.
> +pkt8 to queue7, pkt8 and pkt9 to queue 0.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +fdir for ipv4
> +=============
> +
> +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
> +
> +./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 --disable-rss --
> pkt-filter-mode=perfect
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +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 --disable-rss
> --pkt-filter-mode=perfect
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +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 --disable-rss
> --pkt-filter-mode=perfect
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +1) ipv4-other
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 proto is 3 / end actions queue index 1 / end
> +
> +2) ipv4-udp
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 ttl is 3 / udp src is 22 dst is 23 / end actions queue
> index 2 / end
> +
> +3) ipv4-tcp
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 tos is 3 / tcp src is 32 dst is 33 / end actions queue
> index 3 / end
> +
> +4) ipv4-sctp
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 1 / ipv4 src is
> 192.168.0.1 dst is 192.168.0.2 tos is 3 ttl is 3 / sctp src is 44 dst is
> 45 tag is 1 / end actions queue index 4 / end
> +
> +5) ipv4-other-vf0
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 proto is 3 / vf id is 0 / end actions queue index 1 / end
> +
> +6) ipv4-sctp-vf1
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 2 / ipv4 src is
> 192.168.0.1 dst is 192.168.0.2 tos is 4 ttl is 4 / sctp src is 46 dst is
> 47 tag is 1 / vf id is 1 / end actions queue index 2 / end
> +
> +7) ipv4-sctp drop
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.5 dst
> is 192.168.0.6 tos is 3 ttl is 3 / sctp src is 44 dst is 45 tag is 1 / end
> actions drop / end
> +
> +8) ipv4-sctp passthru-flag
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 3 / ipv4 src is
> 192.168.0.1 dst is 192.168.0.2 tos is 4 ttl is 4 / sctp src is 44 dst is
> 45 tag is 1 / end actions passthru / flag / end
> +
> +9) ipv4-udp queue-flag
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 ttl is 4 / udp src is 22 dst is 23 / end actions queue
> index 5 / flag / end
> +
> +10) ipv4-tcp queue-mark
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 tos is 4 / tcp src is 32 dst is 33 / end actions queue
> index 6 / mark id 3 / end
> +
> +11) ipv4-other passthru-mark
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst
> is 192.168.0.4 proto is 3 / end actions passthru / mark id 4 / end
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2", proto=3)/Raw('x' * 20)
> +pkt2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2", ttl=3)/UDP(sport=22,dport=23)/Raw('x' * 20)
> +pkt3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2", tos=3)/TCP(sport=32,dport=33)/Raw('x' * 20)
> +pkt4 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=1)/IP(src="192.168.0.1",
> dst="192.168.0.2", tos=3,
> ttl=3)/SCTP(sport=44,dport=45,tag=1)/SCTPChunkData(data="X" * 20)
> +pkt5 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=2)/IP(src="192.168.0.1",
> dst="192.168.0.2", tos=4, ttl=4)/SCTP(sport=46,dport=47,tag=1)/Raw('x' *
> 20)
> +pkt6 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.5",
> dst="192.168.0.6", tos=3,
> ttl=3)/SCTP(sport=44,dport=45,tag=1)/SCTPChunkData(data="X" * 20)
> +pkt7 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=3)/IP(src="192.168.0.1",
> dst="192.168.0.2", tos=4, ttl=4)/SCTP(sport=44,dport=45,tag=1)/Raw('x' *
> 20)
> +pkt8 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2", ttl=4)/UDP(sport=22,dport=23)/Raw('x' * 20)
> +pkt9 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2", tos=4)/TCP(sport=32,dport=33)/Raw('x' * 20)
> +pkt10 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.3",
> dst="192.168.0.4", proto=3)/Raw('x' * 20)
> +
> +verify packet
> +pkt1 to queue 1 and vf0 queue 1, pkt2 to queue 2, pkt3 to queue 3, pkt4
> to queue 4, pkt5 to vf1 queue 2, pkt6 can't be received by pf.
> +if not "--disable-rss",
> +pkt7 to queue 0, FDIR matched hash 0 ID 0, pkt8 to queue 5, FDIR matched
> hash 0 ID 0,
> +pkt9 to queue 6, FDIR matched ID 3, pkt10 queue determined by rss rule,
> FDIR matched ID 4.
> +if "--disable-rss"
> +pkt7-9 has same result with above, pkt10 to queue 0, FDIR matched ID 4.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +fdir for ipv6
> +=============
> +
> +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
> +
> +./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 --disable-rss --
> pkt-filter-mode=perfect
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +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 --disable-rss
> --pkt-filter-mode=perfect
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +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 --disable-rss
> --pkt-filter-mode=perfect
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +1) ipv6-other
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 1 / ipv6 src is
> 2001::1 dst is 2001::2 tc is 1 proto is 5 hop is 10 / end actions queue
> index 1 / end
> +
> +2) ipv6-udp
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 2 / ipv6 src is
> 2001::1 dst is 2001::2 tc is 2 hop is 20 / udp src is 22 dst is 23 / end
> actions queue index 2 / end
> +
> +3) ipv6-tcp
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 3 / ipv6 src is
> 2001::1 dst is 2001::2 tc is 3 hop is 30 / tcp src is 32 dst is 33 / end
> actions queue index 3 / end
> +
> +4) ipv6-sctp
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 4 / ipv6 src is
> 2001::1 dst is 2001::2 tc is 4 hop is 40 / sctp src is 44 dst is 45 tag is
> 1 / end actions queue index 4 / end
> +
> +5) ipv6-other-vf0
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 5 / ipv6 src is
> 2001::3 dst is 2001::4 tc is 5 proto is 5 hop is 50 / vf id is 0 / end
> actions queue index 1 / end
> +
> +6) ipv6-tcp-vf1
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 4095 / ipv6 src
> is 2001::3 dst is 2001::4 tc is 6 hop is 60 / tcp src is 32 dst is 33 / vf
> id is 1 / end actions queue index 3 / end
> +
> +7) ipv6-sctp-drop
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 7 / ipv6 src is
> 2001::1 dst is 2001::2 tc is 7 hop is 70 / sctp src is 44 dst is 45 tag is
> 1 / end actions drop / end
> +
> +8) ipv6-tcp-vf1-drop
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 8 / ipv6 src is
> 2001::3 dst is 2001::4 tc is 8 hop is 80 / tcp src is 32 dst is 33 / vf id
> is 1 / end actions drop / end
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=1)/IPv6(src="2001::1",
> dst="2001::2", tc=1, nh=5, hlim=10)/Raw('x' * 20)
> +pkt2 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=2)/IPv6(src="2001::1",
> dst="2001::2", tc=2, hlim=20)/UDP(sport=22,dport=23)/Raw('x' * 20)
> +pkt3 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=3)/IPv6(src="2001::1",
> dst="2001::2", tc=3, hlim=30)/TCP(sport=32,dport=33)/Raw('x' * 20)
> +pkt4 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=4)/IPv6(src="2001::1",
> dst="2001::2", tc=4, nh=132,
> hlim=40)/SCTP(sport=44,dport=45,tag=1)/SCTPChunkData(data="X" * 20)
> +pkt5 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=5)/IPv6(src="2001::3",
> dst="2001::4", tc=5, nh=5, hlim=50)/Raw('x' * 20)
> +pkt6 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=4095)/IPv6(src="2001::3",
> dst="2001::4", tc=6, hlim=60)/TCP(sport=32,dport=33)/Raw('x' * 20)
> +pkt7 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=7)/IPv6(src="2001::1",
> dst="2001::2", tc=7, nh=132,
> hlim=70)/SCTP(sport=44,dport=45,tag=1)/SCTPChunkData(data="X" * 20)
> +pkt8 = Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=8)/IPv6(src="2001::3",
> dst="2001::4", tc=8, hlim=80)/TCP(sport=32,dport=33)/Raw('x' * 20)
> +
> +verify packet
> +pkt1 to queue 1 and vf queue 1, pkt2 to queue 2, pkt3 to queue 3, pkt4 to
> queue 4, pkt5 to vf0 queue 1, pkt6 to vf1 queue 3, pkt7 can't be received
> by pf, pkt8 can't be received by vf1.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +fdir wrong parameters
> +=====================
> +
> +./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 --disable-rss --
> pkt-filter-mode=perfect
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +1) Exceeds maxmial payload limit
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is
> 2.2.2.5 / sctp src is 42 / raw relative is 1 offset is 2 pattern is
> abcdefghijklmnopq / end actions queue index 5 / end
> +Caught error type 9 (specific pattern item): cause: 0x7fd87ff60160,
> Exceeds maxmial payload limit.
> +
> +2) can't set mac_addr when setting fdir filter.
> +testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 /
> vlan tci is 4095 / ipv6 src is 2001::3 dst is 2001::4 tc is 6 hop is 60 /
> tcp src is 32 dst is 33 / end actions queue index 3 / end
> +Caught error type 9 (specific pattern item): cause: 0x7f463ff60100,
> Invalid MAC_addr mask.
> +
> +3) can't change the configuration of the same packet type
> +testpmd> flow create 0 ingress pattern eth / vlan tci is 3 / ipv4 src is
> 192.168.0.1 dst is 192.168.0.2 tos is 4 ttl is 4 / sctp src is 44 dst is
> 45 tag is 1 / end actions passthru / flag / end
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 tos is 4 ttl is 4 / sctp src is 34 dst is 35 tag is 1 / end
> actions passthru / flag / end
> +Caught error type 9 (specific pattern item): cause: 0x7feabff60120,
> Conflict with the first rule's input set.
> +
> +4) invalid queue ID
> +testpmd> flow create 0 ingress pattern eth / ipv6 src is 2001::3 dst is
> 2001::4 tc is 6 hop is 60 / tcp src is 32 dst is 33 / end actions queue
> index 16 / end
> +Caught error type 11 (specific action): cause: 0x7ffc7bb9a338, Invalid
> queue ID for FDIR.
> +
> +If create a rule on vf that has invalid queue ID
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 proto is 3 / vf id is 0 / end actions queue index 4 / end
> +Caught error type 11 (specific action): cause: 0x7ffc7bb9a338, Invalid
> queue ID for FDIR.
> +
> +
> +Note:
> +
> +/// not support ip fragment ///
> +
> +
> +tunnel vxlan
> +============
> +
> +Prerequisites:
> +
> +add a vf on dpdk pf, then bind the vf to vfio-pci.
> +
> +echo 1 >/sys/bus/pci/devices/0000:05:00.0/max_vfs
> +./usertools/dpdk-devbind.py -b vfio-pci 05:02.0
> +
> +./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 --txqflags=0x0 --
> disable-rss
> +testpmd> rx_vxlan_port add 4789 0
> +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
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1e0000 -n 4 -w 05:02.0 --
> file-prefix=vf --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --txqflags=0x0
> --disable-rss
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> set promisc all off
> +testpmd> start
> +the vf's mac address is D2:8C:1A:50:2A:78
> +
> +1. create filter rules,
> +
> +1) inner mac + actions pf
> +testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth dst
> is 00:11:22:33:44:55 / end actions pf / queue index 1 / end
> +
> +2) vni + inner mac + actions pf
> +testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan vni is 2
> / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 2 / end
> +
> +3) inner mac + inner vlan +actions pf
> +testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan / eth dst
> is 00:11:22:33:44:55 / vlan tci is 10 / end actions pf / queue index 3 /
> end
> +
> +4) vni + inner mac + inner vlan + actions pf
> +testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan vni is 4
> / eth dst is 00:11:22:33:44:55 / vlan tci is 20 / end actions pf / queue
> index 4 / end
> +
> +5) inner mac + outer mac + vni + actions pf
> +testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 /
> ipv4 / udp / vxlan vni is 5 /  eth dst is 00:11:22:33:44:55 / end actions
> pf / queue index 5 / end
> +
> +6) vni + inner mac + inner vlan + actions vf
> +testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan vni is 6
> / eth dst is 00:11:22:33:44:55 / vlan tci is 30 / end actions vf id 0 /
> queue index 1 / end
> +
> +7) inner mac + outer mac + vni + actions vf
> +testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 /
> ipv4 / udp / vxlan vni is 7 /  eth dst is 00:11:22:33:44:55 / end actions
> vf id 0 / queue index 3 / end
> +
> +2. send packets,
> +
> +pkt1 =
> Ether(dst="00:11:22:33:44:66")/IP()/UDP()/Vxlan()/Ether(dst="00:11:22:33:4
> 4:55")/IP()/TCP()/Raw('x' * 20)
> +pkt2 =
> Ether(dst="00:11:22:33:44:66")/IP()/UDP()/Vxlan(vni=2)/Ether(dst="00:11:22
> :33:44:55")/IP()/TCP()/Raw('x' * 20)
> +pkt31 =
> Ether(dst="00:11:22:33:44:66")/IP()/UDP()/Vxlan()/Ether(dst="00:11:22:33:4
> 4:55")/Dot1Q(vlan=10)/IP()/TCP()/Raw('x' * 20)
> +pkt32 =
> Ether(dst="00:11:22:33:44:66")/IP()/UDP()/Vxlan()/Ether(dst="00:11:22:33:4
> 4:55")/Dot1Q(vlan=11)/IP()/TCP()/Raw('x' * 20)
> +pkt4 =
> Ether(dst="00:11:22:33:44:66")/IP()/UDP()/Vxlan(vni=4)/Ether(dst="00:11:22
> :33:44:55")/Dot1Q(vlan=20)/IP()/TCP()/Raw('x' * 20)
> +pkt51 =
> Ether(dst="00:11:22:33:44:66")/IP()/UDP()/Vxlan(vni=5)/Ether(dst="00:11:22
> :33:44:55")/IP()/TCP()/Raw('x' * 20)
> +pkt52 =
> Ether(dst="00:11:22:33:44:66")/IP()/UDP()/Vxlan(vni=4)/Ether(dst="00:11:22
> :33:44:55")/IP()/TCP()/Raw('x' * 20)
> +pkt53 =
> Ether(dst="00:00:00:00:01:00")/IP()/UDP()/Vxlan(vni=5)/Ether(dst="00:11:22
> :33:44:55")/IP()/TCP()/Raw('x' * 20)
> +pkt54 =
> Ether(dst="00:11:22:33:44:77")/IP()/UDP()/Vxlan(vni=5)/Ether(dst="00:11:22
> :33:44:55")/IP()/TCP()/Raw('x' * 20)
> +pkt55 =
> Ether(dst="00:00:00:00:01:00")/IP()/UDP()/Vxlan(vni=5)/Ether(dst="00:11:22
> :33:44:77")/IP()/TCP()/Raw('x' * 20)
> +pkt56 =
> Ether(dst="00:11:22:33:44:66")/IP()/UDP()/Vxlan(vni=5)/Ether(dst="00:11:22
> :33:44:77")/IP()/TCP()/Raw('x' * 20)
> +pkt61 =
> Ether(dst="00:11:22:33:44:66")/IP()/UDP()/Vxlan(vni=6)/Ether(dst="00:11:22
> :33:44:55")/Dot1Q(vlan=30)/IP()/TCP()/Raw('x' * 20)
> +pkt62 =
> Ether(dst="00:11:22:33:44:66")/IP()/UDP()/Vxlan(vni=6)/Ether(dst="00:11:22
> :33:44:77")/Dot1Q(vlan=30)/IP()/TCP()/Raw('x' * 20)
> +pkt63 =
> Ether(dst="D2:8C:1A:50:2A:78")/IP()/UDP()/Vxlan(vni=6)/Ether(dst="00:11:22
> :33:44:77")/Dot1Q(vlan=30)/IP()/TCP()/Raw('x' * 20)
> +pkt64 =
> Ether(dst="00:00:00:00:01:00")/IP()/UDP()/Vxlan(vni=6)/Ether(dst="00:11:22
> :33:44:77")/Dot1Q(vlan=30)/IP()/TCP()/Raw('x' * 20)
> +pkt71 =
> Ether(dst="00:11:22:33:44:66")/IP()/UDP()/Vxlan(vni=7)/Ether(dst="00:11:22
> :33:44:55")/IP()/TCP()/Raw('x' * 20)
> +pkt72 =
> Ether(dst="D2:8C:1A:50:2A:78")/IP()/UDP()/Vxlan(vni=7)/Ether(dst="00:11:22
> :33:44:55")/IP()/TCP()/Raw('x' * 20)
> +pkt73 =
> Ether(dst="D2:8C:1A:50:2A:78")/IP()/UDP()/Vxlan(vni=7)/Ether(dst="00:11:22
> :33:44:77")/IP()/TCP()/Raw('x' * 20)
> +pkt74 =
> Ether(dst="00:00:00:00:01:00")/IP()/UDP()/Vxlan(vni=7)/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 vf queue 1 and pf queue 1, pf and vf can't receive pkt62, pkt63
> to vf queue 0, pkt64 to pf queue 0, vf can't receive pkt64,
> +pkt71 to vf queue 3 and pf queue 1, pkt72 to pf queue 1, vf can't receive
> pkt72, pkt73 to vf queue 0, pkt74 to pf queue 0, vf can't receive pkt74.
> +
> +3. verify rules can be listed and destoryed.
> +
> +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 vf queue 3, pkt72 and pkt73 to vf queue 0, pkt74 to pf queue 0,
> vf can't receive pkt74.
> +
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +tunnel nvgre
> +============
> +
> +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
> +
> +./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 --txqflags=0x0
> +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
> +
> +./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 --
> txqflags=0x0
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> set promisc all off
> +testpmd> start
> +the vf's mac address is 54:52:00:00:00:01
> +
> +./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 --
> txqflags=0x0
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> set promisc all off
> +testpmd> start
> +the vf's mac address is 54:52:00:00:00:02
> +
> +1. create filter rules,
> +
> +1) 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
> +
> +2) 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
> +
> +3) 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
> +
> +4) 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
> +
> +5) 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
> +
> +6) 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
> +
> +7) 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
> +
> +2. 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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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:2
> 2: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.
> +
> +3. verify rules can be listed and destoryed.
> +
> +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.
> +
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +Test Cases for ixgbe:
> +=====================
> +
> +SYN
> +===
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=16 --
> txq=16 --disable-rss
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules
> +
> +1)testpmd> flow create 0 ingress pattern eth / ipv4 / tcp flags spec 0x02
> flags mask 0x02 / end actions queue index 3 / end
> +2)testpmd> flow destroy 0 rule 0
> +testpmd> flow create 0 ingress pattern eth / ipv6 / tcp flags spec 0x02
> flags mask 0x02 / end actions queue index 4 / end
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(dport=80,flags="S")/Raw('x' * 20)
> +pkt2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(dport=80,flags="PA")/Raw('x' * 20)
> +pkt3 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/TCP(dport=80,flags="S")/Raw('x' * 20)
> +pkt4 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/TCP(dport=80,flags="PA")/Raw('x' * 20)
> +
> +1.1, verify pkt1 to queue 3, pkt2 to queue 0, pkt3 to queue 3, pkt4 to
> queue 0.
> +1.2, verify pkt1 to queue 4, pkt2 to queue 0, pkt3 to queue 4, pkt4 to
> queue 0.
> +
> +//the out packet default is Flags [S], so if the flags is omitted in sent
> pkt, the pkt will be into queue 3 or queue 4.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +......
> +......
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +n-tuple(supported by x540 and 82599)
> +====================================
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=16 --
> txq=16 --disable-rss
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules
> +
> +1) ipv4-other
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 / end actions queue index 1 / end
> +
> +2) ipv4-udp
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst
> is 192.168.0.3 proto is 17 / udp src is 22 dst is 23 / end actions queue
> index 2 / end
> +
> +3) ipv4-tcp
> +testpmd> flow create 0 ingress pattern ipv4 src is 192.168.0.2 dst is
> 192.168.0.3 proto is 6 / tcp src is 32 dst is 33 / end actions queue index
> 3 / end
> +
> +4) ipv4-sctp
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst
> is 192.168.0.3 proto is 132 / sctp src is 44 dst is 45 / end actions queue
> index 4 / end
> +
> +2. send packets,
> +
> +pkt11 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/Raw('x' * 20)
> +pkt12 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.2",
> dst="192.168.0.3")/Raw('x' * 20)
> +pkt21 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.2",
> dst="192.168.0.3")/UDP(sport=22,dport=23)/Raw('x' * 20)
> +pkt22 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.2",
> dst="192.168.0.3")/UDP(sport=22,dport=24)/Raw('x' * 20)
> +pkt31 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.2",
> dst="192.168.0.3")/TCP(sport=32,dport=33)/Raw('x' * 20)
> +pkt32 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.2",
> dst="192.168.0.3")/TCP(sport=34,dport=33)/Raw('x' * 20)
> +pkt41 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.2",
> dst="192.168.0.3")/SCTP(sport=44,dport=45)/Raw('x' * 20)
> +pkt42 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.2",
> dst="192.168.0.3")/SCTP(sport=44,dport=46)/Raw('x' * 20)
> +pkt5 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/SCTP(sport=44,dport=45)/Raw('x' * 20)
> +pkt6 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/TCP(sport=32,dport=33)/Raw('x' * 20)
> +
> +verify pkt11 to queue 1, pkt12 to queue 0,
> +pkt21 to queue 2, pkt22 to queue 0,
> +pkt31 to queue 3, pkt32 to queue 0,
> +pkt41 to queue 4, pkt42 to queue 0,
> +pkt5 to queue 1, pkt6 to queue 0,
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +......
> +......
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +ethertype
> +=========
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=16 --
> txq=16
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +testpmd> flow validate 0 ingress pattern eth type is 0x0806 / end actions
> queue index 3 / end
> +testpmd> flow validate 0 ingress pattern eth type is 0x86DD / end actions
> queue index 5 / end
> +testpmd> flow create 0 ingress pattern eth type is 0x0806 / end actions
> queue index 3 / end
> +testpmd> flow create 0 ingress pattern eth type is 0x88cc / end actions
> queue index 4 / end
> +
> +the ixgbe don't support the 0x88DD eth type packet. so the second command
> failed.
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.1.1")
> +pkt2 = Ether(dst="00:11:22:33:44:55", type=0x88CC)/Raw('x' * 20)
> +pkt3 = Ether(dst="00:11:22:33:44:55", type=0x86DD)/Raw('x' * 20)
> +
> +verify pkt1 to queue 3, and pkt2 to queue 4, pkt3 to queue 0.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +verify pkt1 to queue 0, and pkt2 to queue 4.
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +verify pkt1 to queue 0, and pkt2 to queue 0.
> +testpmd> flow list 0
> +
> +
> +L2-tunnel(supported by x552 and x550)
> +=====================================
> +
> +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
> +
> +./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 --disable-rss
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +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 --disable-rss
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +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 --disable-rss
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +Enabling ability of parsing E-tag packet, set on pf.
> +
> +testpmd> port config 0 l2-tunnel E-tag enable
> +
> +Enable E-tag packet forwarding, set on pf.
> +
> +testpmd> E-tag set forwarding on port 0
> +
> +1. create filter rules,
> +
> +testpmd> flow create 0 ingress pattern e_tag grp_ecid_b is 0x1309 / end
> actions queue index 0 / end
> +testpmd> flow create 0 ingress pattern e_tag grp_ecid_b is 0x1308 / end
> actions queue index 1 / end
> +testpmd> flow create 0 ingress pattern e_tag grp_ecid_b is 0x1307 / end
> actions queue index 2 / end
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="00:11:22:33:44:55")/Dot1BR(GRP=0x1,
> ECIDbase=0x309)/Raw('x' * 20)
> +pkt2 = Ether(dst="00:11:22:33:44:55")/Dot1BR(GRP=0x1,
> ECIDbase=0x308)/Raw('x' * 20)
> +pkt3 = Ether(dst="00:11:22:33:44:55")/Dot1BR(GRP=0x1,
> ECIDbase=0x307)/Raw('x' * 20)
> +pkt4 = Ether(dst="00:11:22:33:44:55")/Dot1BR(GRP=0x2,
> ECIDbase=0x309)/Raw('x' * 20)
> +
> +verify pkt1 to vf0 queue0, pkt2 to vf1 queue0, pkt3 to pf queue0, pkt4
> can't received by pf and vfs.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +......
> +......
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +fdir for ipv4
> +=============
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=16 --
> txq=16 --disable-rss --pkt-filter-mode=perfect
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +1) ipv4-other(only support by 82599 and x540, this rule matches the n-
> tuple)
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 / end actions queue index 1 / end
> +
> +2) ipv4-udp
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst
> is 192.168.0.4 / udp src is 22 dst is 23 / end actions queue index 2 / end
> +
> +3) ipv4-tcp
> +testpmd> flow create 0 ingress pattern ipv4 src is 192.168.0.3 dst is
> 192.168.0.4 / tcp src is 32 dst is 33 / end actions queue index 3 / end
> +
> +4) ipv4-sctp(x550/x552, 82599 can support this format, because it matches
> n-tuple)
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst
> is 192.168.0.4 / sctp src is 44 dst is 45 / end actions queue index 4 /
> end
> +
> +ipv4-sctp(82599/x540)
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst
> is 192.168.0.4 / sctp / end actions queue index 4 / end
> +
> +
> +5) ipv4-sctp-drop(x550/x552)
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst
> is 192.168.0.4 / sctp src is 46 dst is 47 / end actions drop / end
> +
> +   ipv4-sctp-drop(82599/x540)
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.5 dst
> is 192.168.0.6 / sctp / end actions drop / end
> +
> +//82599 don't support the sctp port match drop, x550 and x552 support it.
> +
> +6) ipv4-udp-flexbytes
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 / udp src is 24 dst is 25 / raw relative is 0 search is 0
> offset is 44 limit is 0 pattern is 86 / end actions queue index 5 / end
> +
> +7) ipv4-tcp-flexbytes
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst
> is 192.168.0.4 / tcp src is 22 dst is 23 / raw relative spec 0 relative
> mask 1 search spec 0 search mask 1 offset spec 54 offset mask 0xffffffff
> limit spec 0 limit mask 0xffff pattern is ab pattern is cd / end actions
> queue index 6 / end
> +//the second pattern will overlap the first pattern.
> +//the rule 6 and 7 should be created after the testpmd reset, because the
> flexbytes rule is global bit masks.
> +
> +8) invalid queue id
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 / udp src is 32 dst is 33 / end actions queue index 16 /
> end
> +// the rule can't be created successfully because the queue id exceeds
> the max queue id.
> +
> +2. send packets,
> +pkt1 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.1",
> dst="192.168.0.2")/Raw('x' * 20)
> +pkt2 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.3",
> dst="192.168.0.4")/UDP(sport=22,dport=23)/Raw('x' * 20)
> +pkt3 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.3",
> dst="192.168.0.4")/TCP(sport=32,dport=33)/Raw('x' * 20)
> +//for x552/x550
> +pkt41 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.3",
> dst="192.168.0.4")/SCTP(sport=44,dport=45)/Raw('x' * 20)
> +pkt42 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.3",
> dst="192.168.0.4")/SCTP(sport=42,dport=43)/Raw('x' * 20)
> +//for 82599/x540
> +pkt41 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.3",
> dst="192.168.0.4")/SCTP()/Raw('x' * 20)
> +pkt42 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.3",
> dst="192.168.0.5")/SCTP()/Raw('x' * 20)
> +//for x552/x550
> +pkt5 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.3",
> dst="192.168.0.4")/SCTP(sport=46,dport=47)/Raw('x' * 20)
> +//for 82599/x540
> +pkt5 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.5",
> dst="192.168.0.6")/SCTP()/Raw('x' * 20)
> +pkt6 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.1",
> dst="192.168.0.2")/UDP(sport=24,dport=25)/Raw(load="xx86ddef")
> +pkt7 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.3",
> dst="192.168.0.4")/TCP(sport=22,dport=23)/Raw(load="abcdxxx")
> +pkt8 = Ether(dst="A0:36:9F:7B:C5:A9")/IP(src="192.168.0.3",
> dst="192.168.0.4")/TCP(sport=22,dport=23)/Raw(load="cdcdxxx")
> +
> +verify pkt1 to pkt3 can be received by queue 1 to queue 3 correctly.
> +pkt41 to queue 4, pkt42 to queue 0
> +pkt5 couldn't be received.
> +pkt6 to queue 5, pkt7 to queue 0, pkt8 to queue 6.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +......
> +......
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +fdir for signature(ipv4/ipv6)
> +=============================
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=16 --
> txq=16 --disable-rss --pkt-filter-mode=signature
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +1) ipv6-other(82599 support this rule,x552 and x550 don't support this
> rule)
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 1 / ipv6 src is
> 2001::1 dst is 2001::2 / end actions queue index 1 / end
> +
> +2) ipv6-udp
> +testpmd> flow create 0 ingress pattern fuzzy thresh spec 2 thresh last 5
> thresh mask 0xffffffff / ipv6 src is 2001::1 dst is 2001::2 / udp src is
> 22 dst is 23 / end actions queue index 2 / end
> +
> +3) ipv6-tcp
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 3 / ipv6 src is
> 2001::1 dst is 2001::2 / tcp src is 32 dst is 33 / end actions queue index
> 3 / end
> +
> +4) ipv6-sctp
> +(x552 and x550)
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 4 / ipv6 src is
> 2001::1 dst is 2001::2 / sctp src is 44 dst is 45 / end actions queue
> index 4 / end
> +(82599 and x540)
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 4 / ipv6 src is
> 2001::1 dst is 2001::2 / sctp / end actions queue index 4 / end
> +
> +5) ipv6-other-flexbytes(just for 82599/x540)
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 6 / ipv6 src is
> 2001::1 dst is 2001::2 / raw relative is 0 search is 0 offset is 56 limit
> is 0 pattern is 86 / end actions queue index 5 / end
> +//this rule can be created successfully on 82599/x540, but can't be
> created successfully on x552/x550, because it's an ipv4-other rule.
> +but the offset<=62, the mac header is 14bytes, the ipv6 header is 40
> bytes, the shortest L4 header(udp header) is 8bytes, the total header is
> 62 bytes, there is no payload can be set offset. so we don't test the ipv6
> flexbytes on x550/x552.
> +//according to hardware limitation, signature mode does not support drop
> action, while IPv6 rely on signature mode, so it is expected result that a
> IPv6 flow with drop action can't be created
> +
> +6) ipv4-other(82599 support this rule,x552 and x550 don't support this
> rule)
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 1 / eth / ipv4 src
> is 192.168.0.1 dst is 192.168.0.2 / end actions queue index 6 / end
> +
> +7) ipv4-udp
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 2 / eth / ipv4 src
> is 192.168.0.1 dst is 192.168.0.2 / udp src is 22 dst is 23 / end actions
> queue index 7 / end
> +
> +8) ipv4-tcp
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 3 / ipv4 src is
> 192.168.0.1 dst is 192.168.0.2 / tcp src is 32 dst is 33 / end actions
> queue index 8 / end
> +
> +9) ipv4-sctp(x550/x552)
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 4 / eth / ipv4 src
> is 192.168.0.1 dst is 192.168.0.2 / sctp src is 44 dst is 45 / end actions
> queue index 9 / end
> +
> +ipv4-sctp(82599/x540)
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 5 / eth / ipv4 src
> is 192.168.0.1 dst is 192.168.0.2 / sctp / end actions queue index 9 / end
> +// if set the ipv4-sctp rule with sctp ports on 82599, it will fail to
> create the rule.
> +
> +10) ipv4-sctp-flexbytes(x550/x552)
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 6 / eth / ipv4 src
> is 192.168.0.1 dst is 192.168.0.2 / sctp src is 24 dst is 25 / raw
> relative is 0 search is 0 offset is 48 limit is 0 pattern is ab / end
> actions queue index 10 / end
> +
> +ipv4-sctp-flexbytes(82599/x540)
> +testpmd> flow create 0 ingress pattern fuzzy thresh is 6 / eth / ipv4 src
> is 192.168.0.1 dst is 192.168.0.2 / sctp / raw relative is 0 search is 0
> offset is 48 limit is 0 pattern is ab / end actions queue index 10 / end
> +//you need to reset testpmd before create this rule, because it's
> conflict with the rule 9.
> +
> +2. send packets,
> +ipv6 packets:
> +pkt1 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/Raw('x' * 20)
> +pkt2 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/UDP(sport=22,dport=23)/Raw('x' * 20)
> +pkt3 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/TCP(sport=32,dport=33)/Raw(load="xxxxabcd")
> +//for x552/x550
> +pkt4 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2",nh=132)/SCTP(sport=44,dport=45,tag=1)/SCTPChunkData(data="cd
> xxxx")
> +pkt5 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2",nh=132)/SCTP(sport=46,dport=47,tag=1)/SCTPChunkData(data="cd
> xxxx")
> +//for 82599/x540
> +pkt41 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2",nh=132)/SCTP(sport=44,dport=45,tag=1)/SCTPChunkData(data="cd
> xxxx")
> +pkt42 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2",nh=132)/SCTP()/SCTPChunkData(data="cdxxxx")
> +pkt51 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2",nh=132)/SCTP(sport=46,dport=47,tag=1)/SCTPChunkData(data="cd
> xxxx")
> +pkt52 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::3",
> dst="2001::4",nh=132)/SCTP(sport=46,dport=47,tag=1)/SCTPChunkData(data="cd
> xxxx")
> +pkt6 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/Raw(load="xx86abcd")
> +pkt7 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/Raw(load="xxx86abcd")
> +
> +ipv4 packets:
> +pkt1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/Raw('x' * 20)
> +pkt2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/UDP(sport=22,dport=23)/Raw('x' * 20)
> +pkt3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(sport=32,dport=33)/Raw('x' * 20)
> +//for x552/x550
> +pkt41 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/SCTP(sport=44,dport=45)/Raw('x' * 20)
> +pkt42 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/SCTP(sport=42,dport=43)/Raw('x' * 20)
> +//for 82599/x540
> +pkt41 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/SCTP()/Raw('x' * 20)
> +pkt42 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.3")/SCTP()/Raw('x' * 20)
> +pkt51 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/SCTP(sport=24,dport=25)/Raw(load="xxabcdef")
> +pkt52 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/SCTP(sport=24,dport=25)/Raw(load="xxaccdef")
> +
> +verify ipv6 packets:
> +//for x552/x550
> +pkt1 to queue 0, pkt2 to queue 2, pkt3 to queue 3.
> +pkt4 to queue 4, pkt5 to queue 0.
> +//for 82599/x540
> +packet pkt1 to pkt3 can be received by queue 1 to queue 3 correctly.
> +pkt41 and pkt42 to queue 4, pkt51 to queue 4, pkt52 to queue 0.
> +pkt6 to queue 5, pkt7 to queue 0.
> +
> +verify ipv4 packets:
> +//for x552/x550
> +pk1 to queue 0, pkt2 to queue 7, pkt3 to queue 8.
> +pkt41 to queue 9, pkt42 to queue 0,
> +pkt51 to queue 10, pkt52 to queue 0.
> +//for 82599/x540
> +pkt1 to pkt3 can be received by queue 6 to queue 8 correctly.
> +pkt41 to queue 9, pkt42 to queue 0,
> +pkt51 to queue 10, pkt52 to queue 0.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +......
> +......
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +fdir for mac/vlan(support by x540, x552, x550)
> +==============================================
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=16 --
> txq=16 --disable-rss --pkt-filter-mode=perfect-mac-vlan
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +testpmd> vlan set strip off 0
> +testpmd> vlan set filter off 0
> +
> +1. create filter rules,
> +
> +testpmd> flow create 0 ingress pattern eth dst is A0:36:9F:7B:C5:A9 /
> vlan tpid is 0x8100 tci is 1 / end actions queue index 9 / end
> +testpmd> flow create 0 ingress pattern eth dst is A0:36:9F:7B:C5:A9 /
> vlan tpid is 0x8100 tci is 4095 / end actions queue index 10 / end
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="A0:36:9F:7B:C5:A9")/Dot1Q(vlan=1)/IP()/TCP()/Raw('x' *
> 20)
> +pkt2 = Ether(dst="A0:36:9F:7B:C5:A9")/Dot1Q(vlan=4095)/IP()/UDP()/Raw('x'
> * 20)
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +......
> +......
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +fdir for tunnel(vxlan and nvgre)(support by x540, x552, x550)
> +=============================================================
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=16 --
> txq=16 --disable-rss --pkt-filter-mode=perfect-tunnel
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +testpmd> flow create 0 ingress pattern eth / ipv4 / udp / vxlan vni is 8
> / eth dst is A0:36:9F:7B:C5:A9 / vlan tci is 2 tpid is 0x8100 / end
> actions queue index 1 / end
> +testpmd> flow create 0 ingress pattern eth / ipv6 / udp / vxlan vni is 9
> / eth dst is A0:36:9F:7B:C5:A9 / vlan tci is 4095 tpid is 0x8100 / end
> actions queue index 2 / end
> +
> +testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112244
> / eth dst is A0:36:9F:7B:C5:A9 / vlan tci is 20 / end actions queue index
> 3 / end
> +testpmd> flow create 0 ingress pattern eth / ipv6 / nvgre tni is 0x112233
> / eth dst is A0:36:9F:7B:C5:A9 / vlan tci is 21 / end actions queue index
> 4 / end
> +
> +2. send packets,
> +pkt1=Ether(dst="A0:36:9F:7B:C5:A9")/IP()/UDP()/Vxlan(vni=8)/Ether(dst="A0
> :36:9F:7B:C5:A9")/Dot1Q(vlan=2)/IP()/TCP()/Raw('x' * 20)
> +pkt2=Ether(dst="A0:36:9F:7B:C5:A9")/IPv6()/UDP()/Vxlan(vni=9)/Ether(dst="
> A0:36:9F:7B:C5:A9")/Dot1Q(vlan=4095)/IP()/TCP()/Raw('x' * 20)
> +
> +pkt3 =
> Ether(dst="A0:36:9F:7B:C5:A9")/IP()/NVGRE(TNI=0x112244)/Ether(dst="A0:36:9
> F:7B:C5:A9")/Dot1Q(vlan=20)/IP()/TCP()/Raw('x' * 20)
> +pkt4 =
> Ether(dst="A0:36:9F:7B:C5:A9")/IPv6()/NVGRE(TNI=0x112233)/Ether(dst="A0:36
> :9F:7B:C5:A9")/Dot1Q(vlan=21)/IP()/TCP()/Raw('x' * 20)
> +
> +verify pkt1 to pkt4 are into queue 1 to queue 4.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +......
> +......
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +Test Cases for igb:
> +=====================
> +
> +SYN
> +===
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=8 --
> txq=8 --disable-rss
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules
> +
> +1)testpmd> flow create 0 ingress pattern eth / ipv4 / tcp flags spec 0x02
> flags mask 0x02 / end actions queue index 3 / end
> +2)testpmd> flow destroy 0 rule 0
> +testpmd> flow create 0 ingress pattern eth / ipv6 / tcp flags spec 0x02
> flags mask 0x02 / end actions queue index 4 / end
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(dport=80,flags="S")/Raw('x' * 20)
> +pkt2 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/TCP(dport=80,flags="S")/Raw('x' * 20)
> +pkt3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(dport=80,flags="PA")/Raw('x' * 20)
> +pkt4 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/TCP(dport=80,flags="PA")/Raw('x' * 20)
> +
> +1)verify pkt1 to queue 3, pkt2 to queue 0, pkt3 to queue 0
> +2)verify pkt2 to queue 4, pkt1 to queue 0, pkt4 to queue 0
> +
> +//the out packet default is Flags [S], so if the flags is omitted in sent
> pkt, the pkt will be into queue 3 or queue 4.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +......
> +......
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +n-tuple(82576)
> +==============
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=8 --
> txq=8 --disable-rss
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules
> +
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 proto is 17 / udp src is 22 dst is 23 / end actions queue
> index 1 / end
> +testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst
> is 192.168.0.2 proto is 6 / tcp src is 22 dst is 23 / end actions queue
> index 2 / end
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="%s")/IP(src="192.168.0.1",
> dst="192.168.0.2")/UDP(sport=22,dport=23)/Raw('x' * 20)
> +pkt2 = Ether(dst="%s")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(sport=32,dport=33)/Raw('x' * 20)
> +
> +verify pkt1 to queue 1, pkt2 to queue 2, pkt3 to queue 3.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +......
> +......
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +n-tuple(i350 or 82580)
> +==============
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=8 --
> txq=8 --disable-rss
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules
> +
> +testpmd> flow create 0 ingress pattern eth / ipv4 proto is 17 / udp dst
> is 23 / end actions queue index 1 / end
> +testpmd> flow create 0 ingress pattern eth / ipv4 proto is 6 / tcp dst is
> 33 / end actions queue index 2 / end
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/UDP(sport=22,dport=23)/Raw('x' * 20)
> +pkt2 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/UDP(sport=22,dport=24)/Raw('x' * 20)
> +pkt3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(sport=32,dport=33)/Raw('x' * 20)
> +pkt4 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(sport=32,dport=34)/Raw('x' * 20)
> +
> +verify pkt1 to queue 1, pkt2 to queue 0.
> +pkt3 to queue 2, pkt4 to queue 0.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +......
> +......
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +testpmd> flow list 0
> +
> +
> +ethertype
> +=========
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=8 --
> txq=8
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +testpmd> flow validate 0 ingress pattern eth type is 0x0806 / end actions
> queue index 3 / end
> +testpmd> flow validate 0 ingress pattern eth type is 0x86DD / end actions
> queue index 5 / end
> +testpmd> flow create 0 ingress pattern eth type is 0x0806 / end actions
> queue index 3 / end
> +testpmd> flow create 0 ingress pattern eth type is 0x88cc / end actions
> queue index 4 / end
> +testpmd> flow create 0 ingress pattern eth type is 0x88cc / end actions
> queue index 8 / end
> +
> +the ixgbe don't support the 0x88DD eth type packet. so the second command
> failed.
> +the queue id exceeds the max queue id, so the last command failed.
> +
> +2. send packets,
> +
> +pkt1 = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.1.1")
> +pkt2 = Ether(dst="00:11:22:33:44:55", type=0x88CC)/Raw('x' * 20)
> +
> +verify pkt1 to queue 3, and pkt2 to queue 4.
> +
> +3. verify rules can be listed and destoryed.
> +
> +testpmd> flow list 0
> +testpmd> flow destroy 0 rule 0
> +verify pkt1 to queue 0, and pkt2 to queue 4.
> +testpmd> flow list 0
> +testpmd> flow flush 0
> +verify pkt1 to queue 0, and pkt2 to queue 0.
> +testpmd> flow list 0
> +
> +
> +flexbytes
> +=========
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -- -i --rxq=8 --
> txq=8 --disable-rss
> +testpmd> set fwd rxonly
> +testpmd> set verbose 1
> +testpmd> start
> +
> +1. create filter rules,
> +
> +1) l2 packet
> +testpmd> flow create 0 ingress pattern raw relative is 0 offset is 14
> pattern is fhds / end actions queue index 1 / end
> +
> +2) l2 packet relative is 1(the first relative must be 0, so this rule
> won't work)
> +testpmd> flow create 0 ingress pattern raw relative is 1 offset is 2
> pattern is fhds / end actions queue index 2 / end
> +
> +3) ipv4 packet
> +testpmd> flow create 0 ingress pattern raw relative is 0 offset is 34
> pattern is ab / end actions queue index 3 / end
> +
> +4) ipv6 packet
> +testpmd> flow create 0 ingress pattern raw relative is 0 offset is 58
> pattern is efgh / end actions queue index 4 / end
> +
> +5) 3 fields relative is 0
> +testpmd> flow create 0 ingress pattern raw relative is 0 offset is 38
> pattern is ab / raw relative is 0 offset is 34 pattern is cd / raw
> relative is 0 offset is 42 pattern is efgh / end actions queue index 5 /
> end
> +
> +6) 4 fields relative is 0 and 1
> +testpmd> flow create 0 ingress pattern raw relative is 0 offset is 48
> pattern is ab / raw relative is 1 offset is 0 pattern is cd / raw relative
> is 0 offset is 44 pattern is efgh / raw relative is 1 offset is 10 pattern
> is hijklmnopq / end actions queue index 6 / end
> +
> +7) 3 fields offset confilict
> +testpmd> flow create 0 ingress pattern raw relative is 0 offset is 64
> pattern is ab / raw relative is 1 offset is 4 pattern is cdefgh / raw
> relative is 0 offset is 68 pattern is klmn / end actions queue index 7 /
> end
> +
> +8) 1 field 128bytes
> +flush the rules
> +testpmd> flow create 0 ingress pattern raw relative is 0 offset is 128
> pattern is ab / end actions queue index 1 / end
> +Caught error type 2 (flow rule (handle)): Failed to create flow.
> +testpmd> flow create 0 ingress pattern raw relative is 0 offset is 126
> pattern is abcd / end actions queue index 1 / end
> +Caught error type 2 (flow rule (handle)): Failed to create flow.
> +testpmd> flow create 0 ingress pattern raw relative is 0 offset is 126
> pattern is ab / end actions queue index 1 / end
> +Flow rule #0 created
> +
> +9) 2 field 128bytes
> +testpmd> flow create 0 ingress pattern raw relative is 0 offset is 68
> pattern is ab / raw relative is 1 offset is 58 pattern is cd / end actions
> queue index 2 / end
> +Caught error type 2 (flow rule (handle)): Failed to create flow.
> +testpmd> flow create 0 ingress pattern raw relative is 0 offset is 68
> pattern is ab / raw relative is 1 offset is 56 pattern is cd / end actions
> queue index 2 / end
> +Flow rule #1 created
> +
> +2. send packets,
> +
> +pkt11 = Ether(dst="00:11:22:33:44:55")/Raw(load="fhdsab")
> +pkt12 = Ether(dst="00:11:22:33:44:55")/Raw(load="afhdsb")
> +pkt2 = Ether(dst="00:11:22:33:44:55")/Raw(load="abfhds")
> +pkt3 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/Raw(load="abcdef")
> +pkt41 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/Raw(load="xxxxefgh")
> +pkt42 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1",
> dst="2001::2")/TCP(sport=32,dport=33)/Raw(load="abcdefgh")
> +pkt5 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/Raw(load="cdxxabxxefghxxxx")
> +pkt6 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2", tos=4,
> ttl=3)/UDP(sport=32,dport=33)/Raw(load="xxefghabcdxxxxxxhijklmnopqxxxx")
> +pkt71 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(sport=22,dport=23)/Raw(load="xxxxxxxxxxabxxklmnefgh
> ")
> +pkt72 = Ether(dst="00:11:22:33:44:55")/IPv6(src="2001::1", dst="2001::2",
> tc=3, hlim=30)/Raw(load="xxxxxxxxxxabxxklmnefgh")
> +pkt73 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(sport=22,dport=23)/Raw(load="xxxxxxxxxxabxxklcdefgh
> ")
> +pkt81 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(sport=22,dport=23)/Raw(load="xxxxxxxxxxxxxxxxxxxxxx
> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxab")
> +pkt82 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(sport=22,dport=23)/Raw(load="xxxxxxxxxxxxxxxxxxxxxx
> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcb")
> +pkt91 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(sport=22,dport=23)/Raw(load="xxxxxxxxxxxxxxabxxxxxx
> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcd")
> +pkt92 = Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.1",
> dst="192.168.0.2")/TCP(sport=22,dport=23)/Raw(load="xxxxxxxxxxxxxxabxxxxxx
> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxce")
> +
> +verify pkt11 to queue 1, pkt12 to queue 0.
> +pkt2 to queue 0.
> +pkt3 to queue 3.
> +pkt41 to queue 4, pkt42 to queue 0, // tcp header has 20 bytes.
> +pkt5 to queue 5.
> +pkt6 to queue 6.
> +pkt71 to queue 7, pkt72 to queue 7, pkt73 to queue 0.
> +pkt81 to queue 1, pkt82 to queue 0.
> +pkt91 to queue 2, pkt92 to queue 0.
> --
> 2.5.0



More information about the dts mailing list