[dts] [PATCH v1] test_plans: Add flow_classify_softnic_test_plan.rst

Tu, Lijuan lijuan.tu at intel.com
Sun Dec 23 08:02:25 CET 2018


Test plan format is not right.

Here are some samples:
Errors while applying patch:
* Applying: test_plans: Add flow_classify_softnic_test_plan.rst
.git/rebase-apply/patch:69: trailing whitespace.
1. change ./drivers/net/softnic/firmware.cli to meet the specific test environment.
.git/rebase-apply/patch:77: trailing whitespace.

.git/rebase-apply/patch:350: trailing whitespace.
sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::1", dst="0::1")/UDP(sport=31, dport=41)/Raw('x'*48), iface="enp131s0f3")
.git/rebase-apply/patch:351: trailing whitespace.
sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::2", dst="0::2")/TCP(sport=32, dport=42)/Raw('x'*48), iface="enp131s0f3")
.git/rebase-apply/patch:352: trailing whitespace.
sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::3", dst="0::3",nh=132)/SCTP(sport=33, dport=43)/Raw('x'*48), iface="enp131s0f3")
warning: squelched 1 whitespace error
warning: 6 lines add whitespace errors.

* Warning while build documents:
flow_classify_softnic_test_plan.rst:101: WARNING: Inline emphasis start-string without end-string.
flow_classify_softnic_test_plan.rst:354: WARNING: Title underline too short

> -----Original Message-----
> From: dts [mailto:dts-bounces at dpdk.org] On Behalf Of Peng Yuan
> Sent: Monday, December 10, 2018 5:26 PM
> To: dts at dpdk.org
> Cc: Peng, Yuan <yuan.peng at intel.com>
> Subject: [dts] [PATCH v1] test_plans: Add flow_classify_softnic_test_plan.rst
> 
> Add a new test plan "flow_classify_softnic_test_plan.rst" to test_plans.
> 
> Signed-off-by: Peng Yuan <yuan.peng at intel.com>
> 
> diff --git a/test_plans/flow_classify_softnic_test_plan.rst
> b/test_plans/flow_classify_softnic_test_plan.rst
> new file mode 100644
> index 0000000..0819d19
> --- /dev/null
> +++ b/test_plans/flow_classify_softnic_test_plan.rst
> @@ -0,0 +1,796 @@
> +.. Copyright (c) < 2017 >, Intel Corporation
> +           All rights reserved.
> +
> +   Redistribution and use in source and binary forms, with or without
> +   modification, are permitted provided that the following conditions
> +   are met:
> +
> +   - Redistributions of source code must retain the above copyright
> +     notice, this list of conditions and the following disclaimer.
> +
> +   - Redistributions in binary form must reproduce the above copyright
> +     notice, this list of conditions and the following disclaimer in
> +     the documentation and/or other materials provided with the
> +     distribution.
> +
> +   - Neither the name of Intel Corporation nor the names of its
> +     contributors may be used to endorse or promote products derived
> +     from this software without specific prior written permission.
> +
> +   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
> CONTRIBUTORS
> +   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
> NOT
> +   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
> FITNESS
> +   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
> THE
> +   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
> INDIRECT,
> +   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
> +   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
> GOODS OR
> +   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> INTERRUPTION)
> +   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
> CONTRACT,
> +   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> +   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
> ADVISED
> +   OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +===================================
> +Flow classification for softnic PMD
> +===================================
> +
> +Description
> +===========
> +The SoftNIC allows building custom NIC pipelines in SW. The Soft NIC
> pipeline
> +is configurable through firmware (DPDK Packet Framework script).
> +
> +Prerequisites
> +================
> +The DUT must have four 10G Ethernet ports connected to four ports on
> +Tester that are controlled by the Scapy packet generator,
> +
> +dut_port_0 <---> tester_port_0
> +dut_port_1 <---> tester_port_1
> +dut_port_2 <---> tester_port_2
> +dut_port_3 <---> tester_port_3
> +
> +Assume four DUT 10G Ethernet ports' pci device id is as the following,
> +
> +dut_port_0 : "0000:05:00.0"
> +dut_port_1 : "0000:05:00.1"
> +dut_port_2 : "0000:05:00.2"
> +dut_port_3 : "0000:05:00.3"
> +
> +Bind them to dpdk igb_uio driver,
> +
> +./usertools/dpdk-devbind.py -b igb_uio 05:00.0 05:00.1 05:00.2 05:00.3
> +
> +1. change ./drivers/net/softnic/firmware.cli to meet the specific test
> environment.
> +
> +2. start softnic with following command line,
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25 -n 4 \
> +--vdev
> 'net_softnic0,firmware=./drivers/net/softnic/firmware.cli,cpu_id=1,conn_po
> rt=8086' \
> +-- -i --forward-mode=softnic --portmask=0x10
> +testpmd> start
> +
> +3. start softnic with default hierarchy Qos with following command line,
> +
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25 -n 4 \
> +--vdev
> 'net_softnic0,firmware=./drivers/net/softnic/firmware.cli,cpu_id=1,conn_po
> rt=8086' \
> +-- -i --forward-mode=softnic --portmask=0x10
> +testpmd> set port tm hierarchy default 1
> +testpmd> start
> +
> +Test Case: ipv4 ACL table
> +=========================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +table action profile AP0 ipv4 offset 270 fwd
> +pipeline RX table match acl ipv4 offset 270 size 4K action AP0
> +flowapi map group 0 ingress pipeline RX table 0
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv4_acl_firmware.cli,cp
> u_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=4 --txq=4
> --disable-rss --portmask=0x10
> +
> +Validate a rule,
> +flow validate 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 0.0.0.0 dst mask 255.192.0.0 src spec 0.0.0.0 dst spec 2.0.0.0 proto spec 17 /
> udp src mask 65535 dst mask 65535 src spec 100 dst spec 200 / end actions
> queue index 3 / end
> +
> +Add rules to table,
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 0.0.0.0 dst mask 255.192.0.0 src spec 0.0.0.0 dst spec 2.0.0.0 proto spec 17 /
> udp src mask 65535 dst mask 65535 src spec 100 dst spec 200 / end actions
> queue index 3 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 0.0.0.0 dst mask 255.192.0.0 src spec 0.0.0.0 dst spec 2.64.0.0 proto spec 6 /
> tcp src mask 65535 dst mask 65535 src spec 100 dst spec 200 / end actions
> queue index 2 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.192.0.0 dst mask 0.0.0.0 src spec 2.128.0.0 dst spec 0.0.0.0 proto spec
> 132 / sctp src mask 65535 dst mask 65535 src spec 100 dst spec 200 / end
> actions queue index 1 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 0.0.0.0 dst mask 255.192.0.0 src spec 0.0.0.0 dst spec 4.0.0.0 proto spec 17 /
> udp src mask 65535 dst mask 65535 src spec 100 dst spec 200 / end actions
> queue index 0 / end
> +testpmd> start
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='0.0.0.0',
> dst='2.0.0.0',proto=17)/UDP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='0.0.0.0',
> dst='2.64.0.0',proto=6)/TCP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='2.128.0.0',
> dst='0.0.0.0',proto=132)/SCTP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='0.0.0.0',
> dst='4.0.0.0',proto=17)/UDP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='0.0.0.0',
> dst='3.0.0.0',proto=17)/UDP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='0.0.0.0',
> dst='2.64.0.0',proto=17)/UDP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='2.128.0.0',
> dst='0.0.0.0',proto=132)/SCTP(sport=101, dport=200)/('X'*48),
> iface="enp131s0f3")
> +
> +The first 4 packets were forwarded to port3/2/1/0.
> +The last 3 packets weren't forwarded.
> +
> +4. Query the rule,
> +testpmd> flow query 4 3 queue
> +Cannot query action type 6 (QUEUE)
> +
> +5. destroy and flush the rule,
> +testpmd> flow list 4
> +ID      Group   Prio    Attr    Rule
> +0       0       0       i--     ETH IPV4 UDP => QUEUE
> +1       0       0       i--     ETH IPV4 TCP => QUEUE
> +2       0       0       i--     ETH IPV4 SCTP => QUEUE
> +3       0       0       i--     ETH IPV4 UDP => QUEUE
> +
> +testpmd> flow destroy 4 rule 1
> +Flow rule #1 destroyed
> +testpmd> flow list 4
> +ID      Group   Prio    Attr    Rule
> +0       0       0       i--     ETH IPV4 UDP => QUEUE
> +2       0       0       i--     ETH IPV4 SCTP => QUEUE
> +3       0       0       i--     ETH IPV4 UDP => QUEUE
> +Send packets, pkt1 to port3, pkt2 can't be forwarded, pkt3 to port1, pkt4 to
> port0.
> +
> +testpmd> flow flush 4
> +testpmd> flow list 4
> +No rule listed.
> +Send the first 4 packets, none of them was forwarded.
> +
> +6. shutdown the port, the rules will be flushed.
> +Re-add the four rules, then start forward.
> +The first 4 packets can be forwarded to port3/2/1/0.
> +Then,
> +testpmd> stop
> +testpmd> port stop 4
> +testpmd> port start 4
> +testpmd> start
> +Send the first 4 packets, none of them was forwarded.
> +
> +Notes: The IPv4 header source address mask must be set from high bits to
> low bits.
> +255.255.192.0 is legal.
> +255.192.255.0 is illegal.
> +
> +Test Case: ipv4-5tuple hash table
> +=================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +table action profile AP0 ipv4 offset 270 fwd
> +pipeline RX table match hash ext key 16 mask
> 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF offset 278 buckets 16K size 64K action
> AP0
> +flowapi map group 0 ingress pipeline RX table 0
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv4_5tuple_hash_firmw
> are.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=4
> --txq=4 --disable-rss --portmask=0x10
> +
> +Add rules to table,
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 100.0.0.1 dst spec
> 200.0.0.1 proto spec 6 / udp src mask 65535 dst mask 65535 src spec 101 dst
> spec 201 / end actions queue index 3 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 100.0.0.2 dst spec
> 200.0.0.2 proto spec 17 / udp src mask 65535 dst mask 65535 src spec 102
> dst spec 202 / end actions queue index 2 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 100.0.0.3 dst spec
> 200.0.0.3 proto spec 132 / udp src mask 65535 dst mask 65535 src spec 103
> dst spec 203 / end actions queue index 1 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 100.0.0.4 dst spec
> 200.0.0.4 proto spec 17 / udp src mask 65535 dst mask 65535 src spec 104
> dst spec 204 / end actions queue index 0 / end
> +
> +testpmd> start
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.1',
> dst='200.0.0.1',proto=6)/TCP(sport=101, dport=201)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.2',
> dst='200.0.0.2',proto=17)/UDP(sport=102, dport=202)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.3',
> dst='200.0.0.3',proto=132)/SCTP(sport=103, dport=203)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.4',
> dst='200.0.0.4',proto=17)/UDP(sport=104, dport=204)/('X'*48),
> iface="enp131s0f3")
> +
> +The first 4 packets were forwarded to port3/2/1/0.
> +Change any parameter of the 5 tuple, the packet can't forwarded to any
> port.
> +
> +Test Case: ipv4-addr hash table
> +===============================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +table action profile AP0 ipv4 offset 270 fwd
> +
> +a) match ipv4 src_addr:
> +pipeline RX table match hash ext key 8 mask FFFFFFFF00000000 offset 282
> buckets 16K size 64K action AP0
> +b) match ipv4 dst_addr:
> +pipeline RX table match hash ext key 8 mask FFFFFF0000000000 offset 286
> buckets 16K size 64K action AP0
> +c) match UDP SPORT:
> +pipeline RX table match hash ext key 8 mask FFFF000000000000 offset 290
> buckets 16K size 64K action AP0
> +
> +flowapi map group 0 ingress pipeline RX table 0
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv4_addr_hash_firmwar
> e.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=4 --txq=4
> --disable-rss --portmask=0x10
> +
> +Add rules to table,
> +a)
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 255.255.255.255 dst mask 0.0.0.0 src spec 100.0.0.1 dst spec 200.0.0.1
> proto spec 17 / udp src mask 0 dst mask 0 src spec 100 dst spec 200 / end
> actions queue index 3 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 255.255.255.255 dst mask 0.0.0.0 src spec 100.0.0.2 dst spec 200.0.0.1
> proto spec 17 / udp src mask 0 dst mask 0 src spec 100 dst spec 200 / end
> actions queue index 2 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 255.255.255.255 dst mask 0.0.0.0 src spec 100.0.0.3 dst spec 200.0.0.1
> proto spec 17 / udp src mask 0 dst mask 0 src spec 100 dst spec 200 / end
> actions queue index 1 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 255.255.255.255 dst mask 0.0.0.0 src spec 100.0.0.4 dst spec 200.0.0.1
> proto spec 17 / udp src mask 0 dst mask 0 src spec 100 dst spec 200 / end
> actions queue index 0 / end
> +b)
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 0.0.0.0 dst mask 255.255.255.0 src spec 100.0.0.1 dst spec 200.0.0.1 proto
> spec 17 / udp src mask 0 dst mask 0 src spec 100 dst spec 200 / end actions
> queue index 3 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 0.0.0.0 dst mask 255.255.255.0 src spec 100.0.0.1 dst spec 200.0.1.1 proto
> spec 6 / tcp src mask 0 dst mask 0 src spec 100 dst spec 200 / end actions
> queue index 2 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 0.0.0.0 dst mask 255.255.255.0 src spec 100.0.0.1 dst spec 200.0.2.1 proto
> spec 132 / sctp src mask 0 dst mask 0 src spec 100 dst spec 200 / end actions
> queue index 1 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 0.0.0.0 dst mask 255.255.255.0 src spec 100.0.0.1 dst spec 200.0.3.1 / end
> actions queue index 0 / end
> +c)
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 0.0.0.0 dst mask 0.0.0.0 src spec 100.0.0.1 dst spec 200.0.0.1 proto spec 17 /
> udp src mask 65535 dst mask 0 src spec 100 dst spec 200 / end actions queue
> index 3 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 0.0.0.0 dst mask 0.0.0.0 src spec 100.0.0.1 dst spec 200.0.0.1 proto spec 6 /
> tcp src mask 65535 dst mask 0 src spec 101 dst spec 200 / end actions queue
> index 2 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 0.0.0.0 dst mask 0.0.0.0 src spec 100.0.0.1 dst spec 200.0.0.1 proto spec 132
> / sctp src mask 65535 dst mask 0 src spec 102 dst spec 200 / end actions
> queue index 1 / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 0.0.0.0 dst mask 0.0.0.0 src spec 100.0.0.1 dst spec 200.0.0.1 proto spec 17 /
> udp src mask 65535 dst mask 0 src spec 103 dst spec 200 / end actions queue
> index 0 / end
> +
> +testpmd> start
> +Notes: The added rule must be consistent with the match table format
> defined in firmware.cli
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +a) match ipv4 src_addr:
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.1',
> dst='200.0.0.1',proto=6)/TCP(sport=101, dport=201)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.2',
> dst='200.0.0.2',proto=17)/UDP(sport=102, dport=202)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.3',
> dst='200.0.0.3',proto=132)/SCTP(sport=103, dport=203)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.4',
> dst='200.0.0.4')/('X'*48), iface="enp131s0f3")
> +The 4 packets were forwarded to port3/2/1/0.
> +Change the ipv4 src address, the packet can't forwarded to any port.
> +
> +b) match ipv4 dst_addr:
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.1',
> dst='200.0.0.1',proto=6)/TCP(sport=101, dport=201)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.2',
> dst='200.0.1.2',proto=17)/UDP(sport=102, dport=202)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.3',
> dst='200.0.2.3',proto=132)/SCTP(sport=103, dport=203)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.4',
> dst='200.0.3.4')/('X'*48), iface="enp131s0f3")
> +The 4 packets were forwarded to port3/2/1/0.
> +Change the ipv4 first 6 bytes of dst address, the packet can't forwarded to
> any port.
> +
> +c) match sport:
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.1',
> dst='200.0.0.1',proto=6)/TCP(sport=100, dport=201)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.2',
> dst='200.0.1.2',proto=17)/UDP(sport=101, dport=202)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.3',
> dst='200.0.2.3',proto=132)/SCTP(sport=102, dport=203)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.2',
> dst='200.0.1.2',proto=17)/UDP(sport=103, dport=202)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='100.0.0.4',
> dst='200.0.3.4')/('X'*48), iface="enp131s0f3")
> +The first 4 packets were forwarded to port3/2/1/0.
> +The last packet can't forwarded to any port.
> +Change the udp/tcp/sctp sport, the packet can't forwarded to any port.
> +
> +Test Case: ipv6 ACL table
> +=========================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +table action profile AP0 ipv6 offset 270 fwd
> +pipeline RX table match acl ipv6 offset 270 size 4K action AP0
> +flowapi map group 0 ingress pipeline RX table 0
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv6_acl_firmware.cli,cp
> u_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=4 --txq=4
> --disable-rss --portmask=0x10
> +
> +Add rules to table,
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask 0:0:0:0:0:0:0:0 src spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:5789 dst spec 0:0:0:0:0:0:0:0 proto
> spec 17 / udp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue
> index 3 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask 0:0:0:0:0:0:0:0 src spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 dst spec 0:0:0:0:0:0:0:0 proto
> spec 6 / tcp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue
> index 2 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask 0:0:0:0:0:0:0:0 src spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:7789 dst spec 0:0:0:0:0:0:0:0 proto
> spec 132 / sctp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions
> queue index 1 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask 0:0:0:0:0:0:0:0 src spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:8789 dst spec 0:0:0:0:0:0:0:0 proto
> spec 17 / udp src mask 65535 dst mask 0 src spec 101 dst spec 0 / end
> actions queue index 0 / end
> +testpmd> start
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:5789", dst="2001::2",nh=17)/UDP(sport=32,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:6789", dst="2001::2",nh=6)/TCP(sport=32,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:7789", dst="2001::2",nh=132)/SCTP(sport=32,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:8789", dst="2001::2",nh=17)/UDP(sport=101,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:9789", dst="2001::2",nh=17)/UDP(sport=32,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:8789", dst="2001::2",nh=17)/UDP(sport=32,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:6789", dst="2001::2",nh=17)/TCP(sport=32,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +
> +The first 4 packets were forwarded to port3/2/1/0.
> +The last 3 packets weren't forwarded.
> +
> +Test Case: ipv6-addr hash table
> +===============================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +table action profile AP0 ipv6 offset 270 fwd
> +
> +a) match ipv6 src_addr:
> +pipeline RX table match hash ext key 16 mask
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF offset 278 buckets 16K size 64K action
> AP0
> +
> +b) match ipv6 dst_addr:
> +pipeline RX table match hash ext key 16 mask
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF offset 294 buckets 16K size 64K action
> AP0
> +
> +flowapi map group 0 ingress pipeline RX table 0
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv6_addr_hash_firmwar
> e.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=4 --txq=4
> --disable-rss --portmask=0x10
> +
> +Add rules to table,
> +a) match ipv6 src_addr:
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0  src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask 0:0:0:0:0:0:0:0 src spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:5789 dst spec 0:0:0:0:0:0:0:0 proto
> spec 17 / udp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue
> index 3 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0  src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask 0:0:0:0:0:0:0:0 src spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 dst spec 0:0:0:0:0:0:0:0 proto
> spec 17 / udp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue
> index 2 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0  src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask 0:0:0:0:0:0:0:0 src spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:7789 dst spec 0:0:0:0:0:0:0:0 proto
> spec 17 / udp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue
> index 1 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0  src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask 0:0:0:0:0:0:0:0 src spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:8789 dst spec 0:0:0:0:0:0:0:0 proto
> spec 17 / udp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue
> index 0 / end
> +
> +b) match ipv6 dst_addr:
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0  dst mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src mask 0:0:0:0:0:0:0:0 dst spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:5789 src spec 0:0:0:0:0:0:0:0 proto
> spec 17 / udp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue
> index 3 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0  dst mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src mask 0:0:0:0:0:0:0:0 dst spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 src spec 0:0:0:0:0:0:0:0 proto
> spec 17 / udp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue
> index 2 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0  dst mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src mask 0:0:0:0:0:0:0:0 dst spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:7789 src spec 0:0:0:0:0:0:0:0 proto
> spec 17 / udp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue
> index 1 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0  dst mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src mask 0:0:0:0:0:0:0:0 dst spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:8789 src spec 0:0:0:0:0:0:0:0 proto
> spec 17 / udp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue
> index 0 / end
> +testpmd> start
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +a) match ipv6 src_addr:
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:5789", dst="2001::2")/TCP(sport=32, dport=33)/Raw('x'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:6789", dst="2001::2")/TCP(sport=32, dport=33)/Raw('x'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:7789", dst="2001::2")/TCP(sport=32, dport=33)/Raw('x'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:8789", dst="2001::2")/TCP(sport=32, dport=33)/Raw('x'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:9789", dst="2001::2")/TCP(sport=32, dport=33)/Raw('x'*48),
> iface="enp131s0f3")
> +
> +b) match ipv6 dst_addr:
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::1",
> dst="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789")/TCP(sport=32,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::1",
> dst="ABCD:EF01:2345:6789:ABCD:EF01:2345:6789")/TCP(sport=32,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::1",
> dst="ABCD:EF01:2345:6789:ABCD:EF01:2345:7789")/TCP(sport=32,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::1",
> dst="ABCD:EF01:2345:6789:ABCD:EF01:2345:8789")/TCP(sport=32,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::1",
> dst="ABCD:EF01:2345:6789:ABCD:EF01:2345:9789")/TCP(sport=32,
> dport=33)/Raw('x'*48), iface="enp131s0f3")
> +
> +The first 4 packets were forwarded to port3/2/1/0.
> +The last packet weren't be forwarded to any port.
> +
> +Test Case: ipv6-5tuple hash table
> +=================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +table action profile AP0 ipv6 offset 270 fwd
> +pipeline RX table match hash ext key 64 mask
> 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> FFFFFFFFFFF000000000000000000000000000000000000000000000000
> offset 274 buckets 16K size 64K action AP0
> +flowapi map group 0 ingress pipeline RX table 0
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv6_5tuple_hash_firmw
> are.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=4
> --txq=4 --disable-rss --portmask=0x10
> +
> +Add rules to table,
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 2001::1 dst spec 0::1 proto spec 17 / udp src mask 65535 dst mask
> 65535 src spec 31 dst spec 41 / end actions queue index 3 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 2001::2 dst spec 0::2 proto spec 6 / tcp src mask 65535 dst mask 65535
> src spec 32 dst spec 42 / end actions queue index 2 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 2001::3 dst spec 0::3 proto spec 132 / sctp src mask 65535 dst mask
> 65535 src spec 33 dst spec 43 / end actions queue index 1 / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 2001::4 dst spec 0::4 proto spec 6 / tcp src mask 65535 dst mask 65535
> src spec 34 dst spec 44 / end actions queue index 0 / end
> +testpmd> start
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::1",
> dst="0::1")/UDP(sport=31, dport=41)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::2",
> dst="0::2")/TCP(sport=32, dport=42)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::3",
> dst="0::3",nh=132)/SCTP(sport=33, dport=43)/Raw('x'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::4",
> dst="0::4")/TCP(sport=34, dport=44)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::1",
> dst="0::1")/TCP(sport=31, dport=41)/Raw('x'*48), iface="enp131s0f3")
> +
> +The first 4 packets were forwarded to port3/2/1/0.
> +The last packet weren't be forwarded to any port.
> +
> +Test Case: ipv4 rule item inconsistent with table match format
> +=============================================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +table action profile AP0 ipv4 offset 270 fwd
> +
> +a) match ipv4 src_addr:
> +pipeline RX table match hash ext key 8 mask FFFFFFFF00000000 offset 282
> buckets 16K size 64K action AP0
> +b) match ipv4 dst_addr:
> +pipeline RX table match hash ext key 8 mask FFFFFF0000000000 offset 286
> buckets 16K size 64K action AP0
> +
> +flowapi map group 0 ingress pipeline RX table 0
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv4_addr_hash_firmwar
> e.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=4 --txq=4
> --disable-rss --portmask=0x10
> +
> +Add rules to table,
> +a)
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 0.0.0.0 dst mask 255.255.255.255 src spec 100.0.0.1 dst spec 200.0.0.1
> proto spec 17 / udp src mask 0 dst mask 0 src spec 100 dst spec 200 / end
> actions queue index 3 / end
> +Error reported, rule item is inconsistent with the table match.
> +Table with hask key mask for src addr, but the rule added is for dst addr.
> +b)
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 0.0.0.0 dst mask 255.255.255.255 src spec 100.0.0.1 dst spec 200.0.0.1
> proto spec 17 / udp src mask 0 dst mask 0 src spec 100 dst spec 200 / end
> actions queue index 3 / end
> +Error reported, rule item is inconsistent with the table match.
> +Table with hask key mask for dst addr 255.255.255.0, but the rule added is
> 255.255.255.255.
> +
> +Test Case: ipv6 rule item inconsistent with table match format
> +=============================================================
> =
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +table action profile AP0 ipv6 offset 270 fwd
> +
> +a) match ipv6 5tuple:
> +pipeline RX table match hash ext key 64 mask
> 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> FFFFFFFFFFF000000000000000000000000000000000000000000000000
> offset 274 buckets 16K size 64K action AP0
> +flowapi map group 0 ingress pipeline RX table 0
> +b) match ipv6 dst_addr:
> +pipeline RX table match hash ext key 16 mask
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF offset 294 buckets 16K size 64K action
> AP0
> +flowapi map group 0 ingress pipeline RX table 0
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv6_5tuple_hash_firmw
> are.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=4
> --txq=4 --disable-rss --portmask=0x10
> +
> +Add rules to table,
> +a)
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 2001::1 dst spec 0::1 proto spec 17 / udp src mask 0 dst mask 65535 src
> spec 31 dst spec 41 / end actions queue index 3 / end
> +Error reported, rule item is inconsistent with the table match.
> +Table with hask key mask for 5 tuple, but the rule added mask udp src with
> 0.
> +b)
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0  src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask 0:0:0:0:0:0:0:0 src spec
> ABCD:EF01:2345:6789:ABCD:EF01:2345:5789 dst spec 0:0:0:0:0:0:0:0 proto
> spec 17 / udp src mask 0 dst mask 0 src spec 0 dst spec 0 / end actions queue
> index 3 / end
> +Error reported, rule item is inconsistent with the table match.
> +Table with hask key mask for dst addr, but the rule added is for src addr.
> +
> +Test Case: ipv4 hash table rss action
> +=====================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +table action profile AP0 ipv4 offset 270 fwd balance offset 278 mask
> 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF outoffset 256
> +a)pipeline RX table match hash ext key 16 mask
> 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF offset 278 buckets 16K size 64K action
> AP0
> +b)pipeline RX table match hash ext key 16 mask
> 00FF0000FFFFFF00FFFFFFFFFFFFFFFF offset 278 buckets 16K size 64K action
> AP0
> +c)pipeline RX table match hash ext key 8 mask FFFF0000FFFFFFFF offset 282
> buckets 16K size 64K action AP0
> +flowapi map group 0 ingress pipeline RX table 0
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv4_rss_firmware.cli,cp
> u_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=4 --txq=4
> --disable-rss --portmask=0x10
> +
> +Add rules to table,
> +a)
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.0 dst spec
> 2.20.21.0 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100 dst
> spec 200 / end actions rss queues 3 end / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.1 dst spec
> 2.20.21.1 proto spec 17 / udp src mask 65535 dst mask 65535 src spec 100
> dst spec 200 / end actions rss queues 2 end / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.2 dst spec
> 2.20.21.2 proto spec 132 / sctp src mask 65535 dst mask 65535 src spec 100
> dst spec 200 / end actions rss queues 1 end / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.3 dst spec
> 2.20.21.3 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100 dst
> spec 200 / end actions rss queues 0 end / end
> +b)
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.0 dst mask 255.255.255.255 src spec 1.10.11.0 dst spec
> 2.20.21.0 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100 dst
> spec 200 / end actions rss queues 0 1 2 3 end / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.0 dst mask 255.255.255.255 src spec 1.10.12.0 dst spec
> 2.20.21.0 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100 dst
> spec 200 / end actions rss queues 0 1 2 3 end / end
> +c)
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 255.255.0.0 dst mask  255.255.255.255 src spec 1.10.11.0 dst spec
> 2.20.21.0 proto spec 6 / tcp src mask 0 dst mask 0 src spec 100 dst spec 200 /
> end actions rss queues 0 end / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 255.255.0.0 dst mask  255.255.255.255 src spec 1.10.11.0 dst spec
> 2.20.21.1 proto spec 6 / tcp src mask 0 dst mask 0 src spec 100 dst spec 200 /
> end actions rss queues 2 3 end / end
> +flow create 4 group 0 ingress pattern eth / ipv4 proto mask 0 src mask
> 255.255.0.0 dst mask  255.255.255.255 src spec 2.10.11.0 dst spec
> 2.20.21.1 proto spec 6 / tcp src mask 0 dst mask 0 src spec 100 dst spec 200 /
> end actions rss queues 1 2 end / end
> +testpmd> start
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +a)
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="1.10.11.0",
> dst="2.20.21.0")/TCP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="1.10.11.1",
> dst="2.20.21.1")/UDP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="1.10.11.2",
> dst="2.20.21.2")/SCTP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="1.10.11.3",
> dst="2.20.21.3")/TCP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="1.10.11.3",
> dst="2.20.21.3")/TCP(sport=101, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +The first 4 packets were forwarded to port3/2/1/0.
> +The last packet weren't be forwarded to any port.
> +b)
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="1.10.11.0",
> dst="2.20.21.0")/TCP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +Set the src address from 1.10.11.0 to 1.10.11.255, and other parameters
> keep constant,
> +The packets were distributed from port0 to port3 according to RSS table.
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="1.10.12.0",
> dst="2.20.21.0")/TCP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +Set the src address from 1.10.12.0 to 1.10.12.255, and other parameters
> keep constant,
> +The packets were distributed from port0 to port3 according to RSS table.
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="1.10.13.0",
> dst="2.20.21.0")/TCP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +The packet was not be forwarded to any port.
> +c)
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="1.10.11.0",
> dst="2.20.21.0")/TCP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +Set the IP src address from 1.10.0.0 to 1.10.255.255, the packet was
> forwarded to port0.
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="1.10.11.0",
> dst="2.20.21.1")/TCP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +Set the IP src address from 1.10.0.0 to 1.10.255.255, or set sport or dport
> to 0-65535, the packet was forwarded to port2 or port3.
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="2.10.11.0",
> dst="2.20.21.1")/TCP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +Set the IP src address from 1.10.0.0 to 1.10.255.255, or set sport or dport
> to 0-65535, the packet was forwarded to port1 or port2.
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="1.10.11.0",
> dst="2.20.21.2")/TCP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +The packet weren't be forwarded to any port.
> +
> +Test Case: ipv6 hash table rss action
> +=====================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +table action profile AP0 ipv6 offset 270 fwd balance offset 274 mask
> 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> FFFFFFFFFFF000000000000000000000000000000000000000000000000
> outoffset 256
> +a)pipeline RX table match hash ext key 64 mask
> 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> FFFFFFFFFFF000000000000000000000000000000000000000000000000
> offset 274 buckets 16K size 64K action AP0
> +b)pipeline RX table match hash ext key 64 mask
> 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF
> FFFFFFFFFFFF000000000000000000000000000000000000000000000000
> offset 274 buckets 16K size 64K action AP0
> +c)pipeline RX table match hash ext key 64 mask
> 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
> 000FFFFFFFF000000000000000000000000000000000000000000000000
> offset 274 buckets 16K size 64K action AP0
> +flowapi map group 0 ingress pipeline RX table 0
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv6_rss_firmware.cli,cp
> u_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=4 --txq=4
> --disable-rss --portmask=0x10
> +
> +Add rules to table,
> +a)
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 2001::1 dst spec 0::1 proto spec 17 / udp src mask 65535 dst mask
> 65535 src spec 31 dst spec 41 / end actions rss queues 3 end / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 2001::2 dst spec 0::2 proto spec 6 / tcp src mask 65535 dst mask 65535
> src spec 32 dst spec 42 / end actions rss queues 2 end / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 2001::3 dst spec 0::3 proto spec 132 / sctp src mask 65535 dst mask
> 65535 src spec 33 dst spec 43 / end actions rss queues 1 end / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 2001::4 dst spec 0::4 proto spec 6 / tcp src mask 65535 dst mask 65535
> src spec 34 dst spec 44 / end actions rss queues 0 end / end
> +b)
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:0 dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec ABCD:EF01:2345:6789:ABCD:EF01:2345:0 dst spec 0::1 proto spec 17 /
> udp src mask 65535 dst mask 65535 src spec 31 dst spec 41 / end actions rss
> queues 0 1 2 3 end / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:0 dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec ABCD:EF01:2345:6789:ABCD:EF01:2346:0 dst spec 0::1 proto spec 17 /
> udp src mask 65535 dst mask 65535 src spec 31 dst spec 41 / end actions rss
> queues 0 1 2 3 end / end
> +c)
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:0 src
> spec 2001::1 dst spec 1001::1 proto spec 17 / udp src mask 65535 dst mask
> 65535 src spec 31 dst spec 41 / end actions rss queues 0 end / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:0 src
> spec 2001::2 dst spec 1001::1 proto spec 6 / tcp src mask 65535 dst mask
> 65535 src spec 32 dst spec 42 / end actions rss queues 2 3 end / end
> +flow create 4 group 0 ingress pattern eth / ipv6 proto mask 0 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:0 src
> spec 2001::1 dst spec 2001::3 proto spec 132 / sctp src mask 65535 dst mask
> 65535 src spec 33 dst spec 43 / end actions rss queues 1 2 end / end
> +testpmd> start
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +a)
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::1",
> dst="0::1")/UDP(sport=31, dport=41)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::2",
> dst="0::2")/TCP(sport=32, dport=42)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::3",
> dst="0::3",nh=132)/SCTP(sport=33, dport=43)/Raw('x'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::4",
> dst="0::4")/TCP(sport=34, dport=44)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::1",
> dst="0::1")/TCP(sport=31, dport=41)/Raw('x'*48), iface="enp131s0f3")
> +The first 4 packets were forwarded to port3/2/1/0.
> +The last packet weren't be forwarded to any port.
> +b)
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2345:0", dst="0::1")/UDP(sport=31, dport=41)/Raw('x'*48),
> iface="enp131s0f3")
> +Set the src address from ABCD:EF01:2345:6789:ABCD:EF01:2345:0 to
> ABCD:EF01:2345:6789:ABCD:EF01:2345:FFFF, and other parameters keep
> constant,
> +The packets were distributed from port0 to port3 according to RSS table.
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2346:0", dst="0::1")/UDP(sport=31, dport=41)/Raw('x'*48),
> iface="enp131s0f3")
> +Set the src address from ABCD:EF01:2345:6789:ABCD:EF01:2346:0 to
> ABCD:EF01:2345:6789:ABCD:EF01:2346:FFFF, and other parameters keep
> constant,
> +The packets were distributed from port0 to port3 according to RSS table.
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:AB
> CD:EF01:2347:0", dst="0::1")/UDP(sport=31, dport=41)/Raw('x'*48),
> iface="enp131s0f3")
> +The packet was not be forwarded to any port.
> +c)
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::1",
> dst="1001::1")/TCP(sport=31, dport=41)/Raw('x'*48), iface="enp131s0f3")
> +Set the IPv6 dst address from 1001::0 to 1001::FFFF, the packet was
> forwarded to port0.
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::2",
> dst="1001::2")/TCP(sport=32, dport=42)/Raw('x'*48), iface="enp131s0f3")
> +Set the IPv6 dst address from 1001::0 to 1001::FFFF, the packet was
> forwarded to port2 or port3.
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::1",
> dst="2001::3")/TCP(sport=33, dport=43)/Raw('x'*48), iface="enp131s0f3")
> +Set the IPv6 dst address from 2001::0 to 2001::FFFF, the packet was
> forwarded to port1 or port2.
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="2001::1",
> dst="0::1")/TCP(sport=31, dport=41)/Raw('x'*48), iface="enp131s0f3")
> +The packet weren't be forwarded to any port.
> +
> +Test Case: ipv4 ACL table jump action
> +=====================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +Just two links:
> +link LINK0 dev 0000:05:00.0
> +link LINK1 dev 0000:05:00.1
> +
> +table action profile AP0 ipv4 offset 270 fwd
> +pipeline RX table match acl ipv4 offset 270 size 4K action AP0
> +pipeline RX table match acl ipv4 offset 270 size 4K action AP0
> +flowapi map group 0 ingress pipeline RX table 0
> +flowapi map group 1 ingress pipeline RX table 1
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv4_acl_jump_firmware.
> cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2
> --disable-rss --portmask=0x4
> +
> +Add rules to table,
> +flow create 2 group 1 ingress pattern eth / ipv4 proto mask 255 src mask
> 0.0.0.0 dst mask 255.192.0.0 src spec 0.0.0.0 dst spec 2.0.0.0 proto spec 6 /
> tcp src mask 65535 dst mask 65535 src spec 100 dst spec 200 / end actions
> queue index 0 / end
> +flow create 2 group 1 ingress pattern eth / ipv4 proto mask 255 src mask
> 0.0.0.0 dst mask 255.192.0.0 src spec 0.0.0.0 dst spec 2.64.0.0 proto spec 6 /
> tcp src mask 65535 dst mask 65535 src spec 100 dst spec 200 / end actions
> queue index  1 / end
> +flow create 2 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 0.0.0.0 dst mask 255.192.0.0 src spec 0.0.0.0 dst spec 2.0.0.0 proto spec 6 /
> tcp src mask 65535 dst mask 65535 src spec 100 dst spec 200 / end actions
> jump group 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 0.0.0.0 dst mask 255.192.0.0 src spec 0.0.0.0 dst spec 2.64.0.0 proto spec 6 /
> tcp src mask 65535 dst mask 65535 src spec 100 dst spec 200 / end actions
> jump group 1 / end
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="0.0.0.0",
> dst="2.0.0.0")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IP(src="0.0.0.0",
> dst="2.64.0.0")/TCP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +
> +The first packet was forwarded to port 0, the second was forwarded to
> port 1.
> +If change the TCP sport or dport, the packet can't be forwarded to any
> port.
> +
> +Notes: When only set the group 1 rules, the input packets match table 0,
> which map group 0, while there is no group 0 rule created.
> +So the packets can't be forwarded.
> +
> +Test Case: ipv4 HASH table jump action
> +=====================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +Just two links:
> +link LINK0 dev 0000:05:00.0
> +link LINK1 dev 0000:05:00.1
> +
> +table action profile AP0 ipv4 offset 270 fwd
> +pipeline RX table match hash ext key 16 mask
> 00FF0000FFFFFFFFFFFFFFFF00000000 offset 278 buckets 16K size 64K action
> AP0
> +pipeline RX table match hash ext key 16 mask
> 00FF0000FFFFFFFFFFFFFFFF00000000 offset 278 buckets 16K size 64K action
> AP0
> +pipeline RX port in 0 table 0
> +pipeline RX port in 1 table 0
> +flowapi map group 0 ingress pipeline RX table 0
> +flowapi map group 1 ingress pipeline RX table 1
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv4_hash_jump_firmwar
> e.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2
> --disable-rss --portmask=0x4
> +
> +Add rules to table,
> +flow create 2 group 1 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.0 dst spec
> 2.20.21.0 proto spec 6 / tcp src mask 0 dst mask 0 src spec 100 dst spec 200 /
> end actions queue index 0 / end
> +flow create 2 group 1 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.1 dst spec
> 2.20.21.1 proto spec 6 / tcp src mask 0 dst mask 0 src spec 100 dst spec 200 /
> end actions queue index 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.0 dst spec
> 2.20.21.0 proto spec  6 / tcp src mask 0 dst mask 0 src spec 100 dst spec
> 200 / end actions jump group 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.1 dst spec
> 2.20.21.1 proto spec  6 / tcp src mask 0 dst mask 0 src spec 100 dst spec
> 200 / end actions jump group 1 / end
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='1.10.11.0',
> dst='2.20.21.0',proto=6)/TCP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='1.10.11.1',
> dst='2.20.21.1',proto=6)/TCP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +
> +The first packet was forwarded to port 0, the second was forwarded to
> port 1.
> +If change the IPv4 dst address or src address, the packet can't be forwarded
> to any port.
> +
> +Notes: when only set the group 1 rules, the input packets match table 0,
> which map group 0, while there is no group 0 rule created.
> +so the packets can't be forwarded.
> +
> +Test Case: ipv4 ACL jump to HASH table
> +======================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +Just two links:
> +link LINK0 dev 0000:05:00.0
> +link LINK1 dev 0000:05:00.1
> +
> +group 0 with ACL table jump to group 1 with HASH table:
> +table action profile AP0 ipv4 offset 270 fwd
> +pipeline RX table match acl ipv4 offset 270 size 4K action AP0
> +pipeline RX table match hash ext key 16 mask
> 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF offset 278 buckets 16K size 64K action
> AP0
> +pipeline RX port in 0 table 0
> +pipeline RX port in 1 table 0
> +flowapi map group 0 ingress pipeline RX table 0
> +flowapi map group 1 ingress pipeline RX table 1
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv4_acl_hash_jump_fir
> mware.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=2
> --txq=2 --disable-rss --portmask=0x4
> +
> +Add rules to table,
> +flow create 2 group 1 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.0 dst spec
> 2.20.21.0 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100 dst
> spec 200 / end actions queue index 0 / end
> +flow create 2 group 1 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.1 dst spec
> 2.20.21.1 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100 dst
> spec 200 / end actions queue index 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.0 dst spec
> 2.20.21.0 proto spec  6 / tcp src mask 0 dst mask 0 src spec 100 dst spec
> 200 / end actions jump group 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.1 dst spec
> 2.20.21.1 proto spec  6 / tcp src mask 0 dst mask 0 src spec 100 dst spec
> 200 / end actions jump group 1 / end
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='1.10.11.0',
> dst='2.20.21.0',proto=6)/TCP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='1.10.11.1',
> dst='2.20.21.1',proto=6)/TCP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +
> +The first packet was forwarded to port 0, the second was forwarded to
> port 1.
> +If change the IPv4 dst address or src address, the packet can't be forwarded
> to any port.
> +
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='1.10.11.0',
> dst='2.20.21.0',proto=6)/TCP(sport=101, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='1.10.11.1',
> dst='2.20.21.1',proto=6)/TCP(sport=100, dport=201)/('X'*48),
> iface="enp131s0f3")
> +
> +The two packets can't be forwarded to any port.
> +
> +Test Case: ipv4 HASH jump to ACL table
> +======================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +Just two links:
> +link LINK0 dev 0000:05:00.0
> +link LINK1 dev 0000:05:00.1
> +
> +group 0 with ACL table jump to group 1 with HASH table:
> +table action profile AP0 ipv4 offset 270 fwd
> +pipeline RX table match hash ext key 16 mask
> 00FF0000FFFFFFFFFFFFFF00FFFFFFFF offset 278 buckets 16K size 64K action
> AP0
> +pipeline RX table match acl ipv4 offset 270 size 4K action AP0
> +pipeline RX port in 0 table 0
> +pipeline RX port in 1 table 0
> +flowapi map group 0 ingress pipeline RX table 0
> +flowapi map group 1 ingress pipeline RX table 1
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv4_hash_acl_jump_fir
> mware.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=2
> --txq=2 --disable-rss --portmask=0x4
> +
> +Add rules to table,
> +flow create 2 group 1 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.0 dst spec
> 2.20.21.0 proto spec 6 / tcp src mask 0 dst mask 0 src spec 100 dst spec 200 /
> end actions queue index 0 / end
> +flow create 2 group 1 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.1 dst spec
> 2.20.21.1 proto spec 6 / tcp src mask 0 dst mask 0 src spec 100 dst spec 200 /
> end actions queue index 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.0 src spec 1.10.11.0 dst spec
> 2.20.21.0 proto spec  6 / tcp src mask 65535 dst mask 65535 src spec 100
> dst spec 200 / end actions jump group 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv4 proto mask 255 src mask
> 255.255.255.255 dst mask 255.255.255.0 src spec 1.10.11.1 dst spec
> 2.20.21.1 proto spec  6 / tcp src mask 65535 dst mask 65535 src spec 100
> dst spec 200 / end actions jump group 1 / end
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='1.10.11.0',
> dst='2.20.21.0',proto=6)/TCP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='1.10.11.1',
> dst='2.20.21.1',proto=6)/TCP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='1.10.11.0',
> dst='2.20.21.2',proto=6)/TCP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +sendp(Ether(dst='00:00:00:00:01:00')/IP(src='1.10.11.1',
> dst='2.20.21.3',proto=6)/TCP(sport=100, dport=200)/('X'*48),
> iface="enp131s0f3")
> +
> +The first packet was forwarded to port 0, the second was forwarded to
> port 1.
> +The last two packets can't be forwarded to any ports.
> +
> +Test Case: ipv6 ACL table jump action
> +=====================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +Just two links:
> +link LINK0 dev 0000:05:00.0
> +link LINK1 dev 0000:05:00.1
> +
> +table action profile AP0 ipv6 offset 270 fwd
> +pipeline RX table match acl ipv6 offset 270 size 4K action AP0
> +pipeline RX table match acl ipv6 offset 270 size 4K action AP0
> +flowapi map group 0 ingress pipeline RX table 0
> +flowapi map group 1 ingress pipeline RX table 1
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv6_acl_jump_firmware.
> cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2
> --disable-rss --portmask=0x4
> +
> +Add rules to table,
> +flow create 2 group 1 ingress pattern eth / ipv6 proto mask 255 src mask
> 0:0:0:0:0:0:0:0 dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src spec 0::1 dst
> spec 2001::1 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100
> dst spec 200 / end actions queue index 0 / end
> +flow create 2 group 1 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 0::1 dst spec 2001::2 proto spec 6 / tcp src mask 65535 dst mask 65535
> src spec 100 dst spec 200 / end actions queue index 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> 0:0:0:0:0:0:0:0 dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src spec 0::1 dst
> spec 2001::1 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100
> dst spec 200 / end actions jump group 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> 0:0:0:0:0:0:0:0 dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src spec 0::1 dst
> spec 2001::2 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100
> dst spec 200 / end actions jump group 1 / end
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::1",
> dst="2001::1")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::1",
> dst="2001::2")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::2",
> dst="2001::1")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::2",
> dst="2001::2")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +
> +The first packet was forwarded to port 0, the second was forwarded to
> port 1.
> +The third packet was forwarded to port 0, the fourth packet can't be
> forwarded to any port.
> +
> +Notes: When only set the group 1 rules, the input packets match table 0,
> which map group 0, while there is no group 0 rule created.
> +So the packets can't be forwarded.
> +
> +Test Case: ipv6 HASH table jump action
> +=====================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +Just two links:
> +link LINK0 dev 0000:05:00.0
> +link LINK1 dev 0000:05:00.1
> +
> +table action profile AP0 ipv6 offset 270 fwd
> +pipeline RX table match hash ext key 64 mask
> 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> FFFFFFFFFFF000000000000000000000000000000000000000000000000
> offset 274 buckets 16K size 64K action AP0
> +pipeline RX table match hash ext key 64 mask
> 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> FFFFFFFFFFF000000000000000000000000000000000000000000000000
> offset 274 buckets 16K size 64K action AP0
> +pipeline RX port in 0 table 0
> +pipeline RX port in 1 table 0
> +flowapi map group 0 ingress pipeline RX table 0
> +flowapi map group 1 ingress pipeline RX table 1
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv6_hash_jump_firmwar
> e.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2
> --disable-rss --portmask=0x4
> +
> +Add rules to table,
> +flow create 2 group 1 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 0::1 dst spec 2001::1 proto spec 6 / tcp src mask 65535 dst mask 65535
> src spec 100 dst spec 200 / end actions queue index 0 / end
> +flow create 2 group 1 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 0::2 dst spec 2001::2 proto spec 17 / udp src mask 65535 dst mask
> 65535 src spec 100 dst spec 200 / end actions queue index 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 0::1 dst spec 2001::1 proto spec 6 / tcp src mask 65535 dst mask 65535
> src spec 100 dst spec 200 / end actions jump group 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 0::2 dst spec 2001::2 proto spec 17 / udp src mask 65535 dst mask
> 65535 src spec 100 dst spec 200 / end actions jump group 1 / end
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::1",
> dst="2001::1")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::2",
> dst="2001::2")/UDP(sport=100, dport=200)/Raw('x'*48),
> iface="enp131s0f3")
> +
> +The first packet was forwarded to port 0, the second was forwarded to
> port 1.
> +If change the IPv6 dst address or src address, the packet can't be forwarded
> to any port.
> +
> +Notes: When only set the group 1 rules, the input packets match table 0,
> which map group 0, while there is no group 0 rule created.
> +So the packets can't be forwarded.
> +
> +Test Case: ipv6 ACL jump to HASH table
> +======================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +Just two links:
> +link LINK0 dev 0000:05:00.0
> +link LINK1 dev 0000:05:00.1
> +
> +group 0 with ACL table jump to group 1 with HASH table:
> +table action profile AP0 ipv6 offset 270 fwd
> +pipeline RX table match acl ipv6 offset 270 size 4K action AP0
> +pipeline RX table match hash ext key 64 mask
> 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> FFFFFFFFFFF000000000000000000000000000000000000000000000000
> offset 274 buckets 16K size 64K action AP0
> +pipeline RX port in 0 table 0
> +pipeline RX port in 1 table 0
> +flowapi map group 0 ingress pipeline RX table 0
> +flowapi map group 1 ingress pipeline RX table 1
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv6_acl_hash_jump_fir
> mware.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=2
> --txq=2 --disable-rss --portmask=0x4
> +
> +Add rules to table,
> +flow create 2 group 1 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 0::1 dst spec 2001::1 proto spec 6 / tcp src mask 65535 dst mask 65535
> src spec 100 dst spec 200 / end actions queue index 0 / end
> +flow create 2 group 1 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 0::2 dst spec 2001::2 proto spec 6 / tcp src mask 65535 dst mask 65535
> src spec 100 dst spec 200 / end actions queue index 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> 0:0:0:0:0:0:0:0 dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src spec 0::1 dst
> spec 2001::1 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100
> dst spec 200 / end actions jump group 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> 0:0:0:0:0:0:0:0 dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src spec 0::2 dst
> spec 2001::2 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100
> dst spec 200 / end actions jump group 1 / end
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::1",
> dst="2001::1")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::2",
> dst="2001::2")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::3",
> dst="2001::1")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::4",
> dst="2001::2")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +
> +The first packet was forwarded to port 0, the second was forwarded to
> port 1.
> +The last two packets can't be forwarded to any ports.
> +
> +Test Case: ipv6 HASH jump to ACL table
> +======================================
> +1. Edit flow_classification_firmware.cli to change "table action" and
> "pipeline table" as below,
> +
> +Just two links:
> +link LINK0 dev 0000:05:00.0
> +link LINK1 dev 0000:05:00.1
> +
> +group 0 with ACL table jump to group 1 with HASH table:
> +table action profile AP0 ipv6 offset 270 fwd
> +pipeline RX table match hash ext key 64 mask
> 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> FFFFFFF0000000000000000000000000000000000000000000000000000
> offset 274 buckets 16K size 64K action AP0
> +pipeline RX table match acl ipv6 offset 270 size 4K action AP0
> +pipeline RX port in 0 table 0
> +pipeline RX port in 1 table 0
> +flowapi map group 0 ingress pipeline RX table 0
> +flowapi map group 1 ingress pipeline RX table 1
> +
> +2. start softnic,
> +./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25  -n 4 --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/flow_ipv6_hash_acl_jump_fir
> mware.cli,cpu_id=1,conn_port=8086' -- -i --forward-mode=softnic --rxq=2
> --txq=2 --disable-rss --portmask=0x4
> +
> +Add rules to table,
> +flow create 2 group 1 ingress pattern eth / ipv6 proto mask 255 src mask
> 0:0:0:0:0:0:0:0 dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src spec 0::1 dst
> spec 2001::1 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec 100
> dst spec 200 / end actions queue index 0 / end
> +flow create 2 group 1 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 0::2 dst spec 2001::2 proto spec 6 / tcp src mask 0 dst mask 65535 src
> spec 100 dst spec 200 / end actions queue index 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 0::1 dst spec 2001::1 proto spec 6 / tcp src mask 65535 dst mask 0 src
> spec 100 dst spec 200 / end actions jump group 1 / end
> +flow create 2 group 0 ingress pattern eth / ipv6 proto mask 255 src mask
> ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff dst mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff src
> spec 0::2 dst spec 2001::2 proto spec 6 / tcp src mask 65535 dst mask 0 src
> spec 100 dst spec 200 / end actions jump group 1 / end
> +
> +3. sent packet, verify the packets were forwarded to the expected ports.
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::1",
> dst="2001::1")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::2",
> dst="2001::2")/TCP(sport=100, dport=200)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::1",
> dst="2001::1")/TCP(sport=100, dport=201)/Raw('x'*48), iface="enp131s0f3")
> +sendp(Ether(dst="00:00:00:00:01:00")/IPv6(src="0::2",
> dst="2001::2")/TCP(sport=100, dport=202)/Raw('x'*48), iface="enp131s0f3")
> +
> +The first packet was forwarded to port 0, the second was forwarded to
> port 1.
> +The last two packets can't be forwarded to any ports.
> --
> 2.5.0



More information about the dts mailing list