[dts] [PATCH v2] test_plan: add test plan of generic_flow_api

Liu, Yong yong.liu at intel.com
Mon Sep 18 04:18:25 CEST 2017


Yuan, your patched hasn't been merged yet:) Please send out whole file for review.

Thanks,
Marvin

> -----Original Message-----
> From: dts [mailto:dts-bounces at dpdk.org] On Behalf Of Peng Yuan
> Sent: Thursday, September 07, 2017 3:06 PM
> To: dts at dpdk.org
> Cc: Peng, Yuan <yuan.peng at intel.com>
> Subject: [dts] [PATCH v2] test_plan: add test plan of generic_flow_api
> 
> 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
> index e8bd3b7..3ce295b 100644
> --- a/test_plans/generic_flow_api_test_plan.rst
> +++ b/test_plans/generic_flow_api_test_plan.rst
> @@ -44,336 +44,387 @@ Prerequisites
>     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:
> -====================
> +3. bind the pf to dpdk driver::
> +
> +    ./usertools/dpdk-devbind.py -b igb_uio 05:00.0
> +
> +
> +Test case: Fortville ethertype
> +==============================
> 
> -ethertype
> -=========
> +1. Launch the app ``testpmd`` with the following arguments::
> 
> -./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
> +    ./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,
> +2. 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
> +    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.
> +the i40e don't support the 0x88cc eth type packet. so the last two
> commands
> +failed.
> 
> -2. send packets,
> +3. 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)
> +    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.
> +4. 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 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
> 
> -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
> 
> +Test case: Fortville fdir for L2 payload
> +========================================
> 
> -fdir for L2 payload
> -===================
> +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 --disable-rss --
> pkt-filter-mode=perfect
> -testpmd> set fwd rxonly
> -testpmd> set verbose 1
> -testpmd> start
> +    ./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,
> +2. 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
> +    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,
> +3. 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)
> +    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.
> +4. 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
> +    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
> -==================
> +Test case: Fortville fdir for flexbytes
> +=======================================
> +
> +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 --disable-
> rss --pkt-filter-mode=perfect
> +    testpmd> set fwd rxonly
> +    testpmd> set verbose 1
> +    testpmd> start
> +
> +2. 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::
> 
> -./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
> +    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
> 
> -1. create filter rules,
> +3) ipv4-udp::
> 
> -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
> +    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
> 
> -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
> +4) ipv4-tcp::
> 
> -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
> +    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
> 
> -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::
> 
> -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
> +    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
> +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
> +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,
> +3. 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")
> +    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")
> +pkt8-pkt10 are not supported now::
> 
> -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.
> +    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")
> 
> -3. verify rules can be listed and destoryed.
> +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.
> 
> -testpmd> flow list 0
> -testpmd> flow destroy 0 rule 0
> -testpmd> flow list 0
> -testpmd> flow flush 0
> -testpmd> flow list 0
> +4. 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
> -=============
> +
> +Test case: Fortville fdir for ipv4
> +==================================
> 
>  Prerequisites:
> +add two vfs on dpdk pf, then bind the vfs to vfio-pci::
> 
> -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
> 
> -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 --disable-rss --
> pkt-filter-mode=perfect
> -testpmd> set fwd rxonly
> -testpmd> set verbose 1
> -testpmd> start
> +    ./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 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
> +    ./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,
> +2. create filter rules
> +1) ipv4-other::
> 
> -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
> +    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
> +2) ipv4-udp::
> 
> -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
> +    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
> 
> -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
> +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
> 
> -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::
> 
> -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
> +    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
> +7) ipv4-sctp drop::
> 
> -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
> +    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
> 
> -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
> +8) ipv4-sctp passthru-flag::
> 
> -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
> +    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
> 
> -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
> +9) ipv4-udp queue-flag::
> 
> -2. send packets,
> +    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
> 
> -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)
> +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
> +
> +3. 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.
> +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.
> +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.
> +4. 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
> +    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
> -=============
> +Test case: Fortville fdir for ipv6
> +==================================
> 
>  Prerequisites:
> +add two vfs on dpdk pf, then bind the vfs to vfio-pci::
> 
> -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
> 
> -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 --disable-rss --
> pkt-filter-mode=perfect
> -testpmd> set fwd rxonly
> -testpmd> set verbose 1
> -testpmd> start
> +    ./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 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
> +    ./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,
> +2. create filter rules
> +1) ipv6-other::
> 
> -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
> +    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
> +2) ipv6-udp::
> 
> -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
> +    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
> 
> -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
> +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::
> 
> -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
> +    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
> +6) ipv6-tcp-vf1::
> 
> -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
> +    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
> 
> -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
> +7) ipv6-sctp-drop::
> 
> -2. send packets,
> +    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
> 
> -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)
> +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
> +
> +3. 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.
> +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.
> +
> +4. 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 case: Fortville fdir wrong parameters
> +==========================================
> +
> +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 --disable-
> rss --pkt-filter-mode=perfect
> +    testpmd> set fwd rxonly
> +    testpmd> set verbose 1
> +    testpmd> start
> +
> +2. 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
> 
> -3. verify rules can be listed and destoryed.
> +it shows "Caught error type 9 (specific pattern item): cause:
> 0x7fd87ff60160,
> +Exceeds maxmial payload limit".
> 
> -testpmd> flow list 0
> -testpmd> flow destroy 0 rule 0
> -testpmd> flow list 0
> -testpmd> flow flush 0
> -testpmd> flow list 0
> +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
> 
> -fdir wrong parameters
> -=====================
> +it shows "Caught error type 9 (specific pattern item): cause:
> 0x7f463ff60100,
> +Invalid MAC_addr mask".
> 
> -./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
> +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
> 
> -1. create filter rules,
> +it shows "Caught error type 9 (specific pattern item): cause:
> 0x7feabff60120,
> +Conflict with the first rule's input set".
> 
> -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.
> +4) invalid queue ID::
> 
> -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.
> +    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
> 
> -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.
> +it shows "Caught error type 11 (specific action): cause: 0x7ffc7bb9a338,
> +Invalid queue ID for FDIR".
> 
> -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::
> 
> -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.
> +    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
> +
> +it shows "Caught error type 11 (specific action): cause: 0x7ffc7bb9a338,
> +Invalid queue ID for FDIR".
> 
> 
>  Note:
> @@ -381,262 +432,293 @@ Note:
>  /// not support ip fragment ///
> 
> 
> -tunnel vxlan
> -============
> +Test case: Fortville tunnel vxlan
> +=================================
> 
> -Prerequisites:
> +Prerequisites
> +add a vf on dpdk pf, then bind the vf to vfio-pci::
> 
> -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
> 
> -echo 1 >/sys/bus/pci/devices/0000:05:00.0/max_vfs
> -./usertools/dpdk-devbind.py -b vfio-pci 05:02.0
> +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 --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 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
> 
> -./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,
> +2. 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
> 
> -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::
> 
> -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
> +    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
> +3) inner mac + inner vlan +actions pf::
> 
> -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
> +    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
> 
> -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
> +4) vni + inner mac + inner vlan + actions pf::
> 
> -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
> +    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
> 
> -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
> +5) inner mac + outer mac + vni + actions pf::
> 
> -2. send packets,
> +    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
> 
> -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)
> +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
> +
> +3. 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.
> +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.
> +4. verify rules can be listed and destoryed::
> 
> -testpmd> flow list 0
> -testpmd> flow destroy 0 rule 0
> +    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.
> +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.
> +Then::
> 
> -testpmd> flow flush 0
> -testpmd> flow list 0
> +    testpmd> flow flush 0
> +    testpmd> flow list 0
> 
> 
> -tunnel nvgre
> -============
> +Test case: Fortville 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
> 
> -add two vfs on dpdk pf, then bind the vfs to vfio-pci.
> +1. Launch the app ``testpmd`` with the following arguments::
> 
> -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
> +
> +    ./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
> +
> +    ./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
> 
> -./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
> +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
> +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::
> 
> -./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)
> +    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
> +
> +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: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.
> +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.
> +4. verify rules can be listed and destoryed::
> 
> -testpmd> flow list 0
> -testpmd> flow destroy 0 rule 0
> +    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.
> +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
> 
> -testpmd> flow flush 0
> -testpmd> flow list 0
> 
> +Test case: IXGBE SYN
> +====================
> 
> -Test Cases for ixgbe:
> -=====================
> +1. Launch the app ``testpmd`` with the following arguments::
> 
> -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
> 
> -./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
> +2. create filter rules
> +1)ipv4::
> 
> -1. create filter rules
> +    testpmd> flow create 0 ingress pattern eth / ipv4 / tcp flags spec
> 0x02 flags mask 0x02 / end actions queue index 3 / end
> 
> -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)ipv6::
> 
> -2. send packets,
> +    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
> 
> -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)
> +3. send packets::
> 
> -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.
> +    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)
> 
> -//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.
> +ipv4 verify pkt1 to queue 3, pkt2 to queue 0, pkt3 to queue 3, pkt4 to
> queue 0
> +ipv6 verify pkt1 to queue 4, pkt2 to queue 0, pkt3 to queue 4, pkt4 to
> queue 0
> +notes: 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.
> +4. 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
> +    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)
> -====================================
> +Test case: IXGBE 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. Launch the app ``testpmd`` with the following arguments::
> 
> -1. create filter rules
> +    ./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) 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. create filter rules
> +1) ipv4-other::
> 
> -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
> +    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
> 
> -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
> +2) ipv4-udp::
> 
> -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
> +    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::
> 
> -2. send packets,
> +    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
> 
> -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)
> +3. 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,
> @@ -644,576 +726,667 @@ 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.
> +4. 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
> 
> -testpmd> flow list 0
> -testpmd> flow destroy 0 rule 0
> -......
> -......
> -testpmd> flow list 0
> -testpmd> flow flush 0
> -testpmd> flow list 0
> 
> +Test case: IXGBE ethertype
> +==========================
> 
> -ethertype
> -=========
> +1. Launch the app ``testpmd`` with the following arguments::
> 
> -./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
> +    ./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,
> +2. 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 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.
> +the ixgbe don't support the 0x88DD eth type packet. so the second command
> +failed.
> 
> -2. send packets,
> +3. 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)
> +    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.
> +4. verify rules can be listed and destoryed::
> +
> +    testpmd> flow list 0
> +    testpmd> flow destroy 0 rule 0
> 
> -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
> +Then::
> +
> +    testpmd> flow list 0
> +    testpmd> flow flush 0
> +
>  verify pkt1 to queue 0, and pkt2 to queue 0.
> -testpmd> flow list 0
> +Then::
> 
> +    testpmd> flow list 0
> 
> -L2-tunnel(supported by x552 and x550)
> -=====================================
> +
> +Test case: IXGBE L2-tunnel(supported by x552 and x550)
> +======================================================
> 
>  Prerequisites:
> +add two vfs on dpdk pf, then bind the vfs to vfio-pci::
> 
> -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
> 
> -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 --disable-rss
> -testpmd> set fwd rxonly
> -testpmd> set verbose 1
> -testpmd> start
> +    ./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 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
> +    ./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.
> +Enabling ability of parsing E-tag packet, set on pf::
> 
> -testpmd> port config 0 l2-tunnel E-tag enable
> +    testpmd> port config 0 l2-tunnel E-tag enable
> 
> -Enable E-tag packet forwarding, set on pf.
> +Enable E-tag packet forwarding, set on pf::
> 
> -testpmd> E-tag set forwarding on port 0
> +    testpmd> E-tag set forwarding on port 0
> 
> -1. create filter rules,
> +2. 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
> +    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,
> +3. 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)
> +    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.
> +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.
> +4. 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
> +    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
> -=============
> +Test case: IXGBE fdir for ipv4
> +==============================
> +
> +1. Launch the app ``testpmd`` with the following arguments::
> +
> +    ./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
> +
> +2. 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
> 
> -./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
> +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)::
> 
> -1. create filter rules,
> +    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
> 
> -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
> +5) ipv4-sctp-drop(x550/x552)::
> 
> -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
> +    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
> 
> -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-drop(82599/x540)::
> 
> -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
> +    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
> 
> +notes: 82599 don't support the sctp port match drop, x550 and x552
> support it.
> 
> -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
> +6) ipv4-udp-flexbytes::
> 
> -   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
> +    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
> 
> -//82599 don't support the sctp port match drop, x550 and x552 support it.
> +7) ipv4-tcp-flexbytes::
> 
> -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
> +    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
> +
> +notes: 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
> 
> -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.
> +notes: the rule can't be created successfully because the queue id
> +exceeds the max queue id.
> 
> -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.
> +3. send packets::
> 
> -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")
> +    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.
> +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.
> +4. 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
> +    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)
> -=============================
> +Test case: IXGBE fdir for signature(ipv4/ipv6)
> +==============================================
> +
> +1. Launch the app ``testpmd`` with the following arguments::
> 
> -./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
> +    ./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,
> +2. 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::
> 
> -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
> +    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
> 
> -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::
> 
> -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
> +    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")
> +(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
> +
> +notes: 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
> +
> +notes: 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
> +
> +notes: you need to reset testpmd before create this rule,
> +because it's conflict with the rule 9.
> +
> +3. 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
> +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
> +
> +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
> +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
> +
> +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.
> +4. 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
> +    testpmd> flow list 0
> +    testpmd> flow destroy 0 rule 0
> +    testpmd> flow list 0
> +    testpmd> flow flush 0
> +    testpmd> flow list 0
> 
> +Test case: IXGBE fdir for mac/vlan(support by x540, x552, x550)
> +===============================================================
> 
> -fdir for mac/vlan(support by x540, x552, x550)
> -==============================================
> +1. Launch the app ``testpmd`` with the following arguments::
> +
> +    ./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
> 
> -./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
> +2. create filter rules::
> 
> -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
> 
> -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
> +3. send packets::
> 
> -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)
> 
> -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)
> +4. verify rules can be listed and destoryed::
> 
> -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
> 
> -testpmd> flow list 0
> -testpmd> flow destroy 0 rule 0
> -......
> -......
> -testpmd> flow list 0
> -testpmd> flow flush 0
> -testpmd> flow list 0
> +Test case: IXGBE fdir for tunnel(vxlan and nvgre)(support by x540, x552,
> x550)
> +=========================================================================
> =====
> 
> +1. Launch the app ``testpmd`` with the following arguments::
> 
> -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
> 
> -./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
> +2. create filter rules
> +vxlan::
> 
> -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 / 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
> +nvgre::
> 
> -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
> +    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="A
> 0:36:9F:7B:C5:A9")/Dot1Q(vlan=4095)/IP()/TCP()/Raw('x' * 20)
> +3. send packets
> +vxlan::
> 
> -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)
> +
> 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="A
> 0:36:9F:7B:C5:A9")/Dot1Q(vlan=4095)/IP()/TCP()/Raw('x' * 20)
> +
> +nvgre::
> +
> +    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.
> +4. 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 case: igb SYN
> +==================
> 
> -testpmd> flow list 0
> -testpmd> flow destroy 0 rule 0
> -......
> -......
> -testpmd> flow list 0
> -testpmd> flow flush 0
> -testpmd> flow list 0
> +1. Launch the app ``testpmd`` with the following arguments::
> 
> +    ./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
> 
> -Test Cases for igb:
> -=====================
> +2. create filter rules
> 
> -SYN
> -===
> +1) ipv4::
> 
> -./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
> +    testpmd> flow create 0 ingress pattern eth / ipv4 / tcp flags spec
> 0x02 flags mask 0x02 / end actions queue index 3 / end
> 
> -1. create filter rules
> +2) ipv6::
> 
> -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
> +    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,
> +3. 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)
> +    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
> +ipv4 verify pkt1 to queue 3, pkt2 to queue 0, pkt3 to queue 0
> +ipv6 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.
> +notes: 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.
> +4. 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
> +    testpmd> flow list 0
> +    testpmd> flow destroy 0 rule 0
> +    testpmd> flow list 0
> +    testpmd> flow flush 0
> +    testpmd> flow list 0
> 
> +Test case: igb n-tuple(82576)
> +=============================
> 
> -n-tuple(82576)
> -==============
> +1. Launch the app ``testpmd`` with the following arguments::
> 
> -./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
> +    ./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
> +2. 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
> +    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,
> +3. 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)
> +    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.
> +4. 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
> +    testpmd> flow list 0
> +    testpmd> flow destroy 0 rule 0
> +    testpmd> flow list 0
> +    testpmd> flow flush 0
> +    testpmd> flow list 0
> 
> +Test case: igb n-tuple(i350 or 82580)
> +=====================================
> 
> -n-tuple(i350 or 82580)
> -==============
> +1. Launch the app ``testpmd`` with the following arguments::
> 
> -./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
> +    ./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
> +2. 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
> +    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,
> +3. 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)
> +    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.
> +4. 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
> +    testpmd> flow list 0
> +    testpmd> flow destroy 0 rule 0
> +    testpmd> flow list 0
> +    testpmd> flow flush 0
> +    testpmd> flow list 0
> 
> +Test case: igb ethertype
> +========================
> 
> -ethertype
> -=========
> +1. Launch the app ``testpmd`` with the following arguments::
> 
> -./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
> +    ./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,
> +2. 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
> +    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.
> +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,
> +3. 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)
> +    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.
> +4. 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
> +    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
> +Then::
> +
> +    testpmd> flow list 0
> 
> +Test case: igb flexbytes
> +========================
> 
> -flexbytes
> -=========
> +1. Launch the app ``testpmd`` with the following arguments::
> 
> -./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
> +    ./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
> +
> +2. 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
> 
> -1. create filter rules,
> +4) ipv6 packet::
> 
> -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
> +    testpmd> flow create 0 ingress pattern raw relative is 0 offset is 58
> pattern is efgh / end actions queue index 4 / 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
> +5) 3 fields relative is 0::
> 
> -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
> +    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
> 
> -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
> +6) 4 fields relative is 0 and 1::
> 
> -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
> +    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
> 
> -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::
> 
> -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
> +    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")
> +flush the rules::
> +
> +    testpmd> flow flush 0
> +
> +then create the rule::
> +
> +    testpmd> flow create 0 ingress pattern raw relative is 0 offset is
> 128 pattern is ab / end actions queue index 1 / end
> +    testpmd> flow create 0 ingress pattern raw relative is 0 offset is
> 126 pattern is abcd / end actions queue index 1 / end
> +    testpmd> flow create 0 ingress pattern raw relative is 0 offset is
> 126 pattern is ab / end actions queue index 1 / end
> +
> +the first two rules failed to create, only the last flow rule is created
> successfully.
> +
> +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
> +    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
> +
> +the first rule failed to create, only the last flow rule is created
> successfully.
> +
> +3. 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.
> @@ -1224,3 +1397,11 @@ 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.
> +
> +4. 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
> --
> 2.5.0



More information about the dts mailing list