From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 8AAD31B6CB for ; Sun, 23 Dec 2018 08:02:30 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Dec 2018 23:02:29 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,386,1539673200"; d="scan'208";a="111538832" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga008.fm.intel.com with ESMTP; 22 Dec 2018 23:02:29 -0800 Received: from fmsmsx112.amr.corp.intel.com (10.18.116.6) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sat, 22 Dec 2018 23:02:29 -0800 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by FMSMSX112.amr.corp.intel.com (10.18.116.6) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sat, 22 Dec 2018 23:02:28 -0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.201]) by shsmsx102.ccr.corp.intel.com ([169.254.2.182]) with mapi id 14.03.0415.000; Sun, 23 Dec 2018 15:02:26 +0800 From: "Tu, Lijuan" To: "Peng, Yuan" , "dts@dpdk.org" CC: "Peng, Yuan" Thread-Topic: [dts] [PATCH v1] test_plans: Add flow_classify_softnic_test_plan.rst Thread-Index: AQHUkGoAA8melnfLtU+8S9ZVW4JKDqWL+QPw Date: Sun, 23 Dec 2018 07:02:25 +0000 Message-ID: <8CE3E05A3F976642AAB0F4675D0AD20E0B9E5E76@SHSMSX101.ccr.corp.intel.com> References: <1544433950-20793-1-git-send-email-yuan.peng@intel.com> In-Reply-To: <1544433950-20793-1-git-send-email-yuan.peng@intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYjk3NDkzMjktNzRmNi00OWI4LThiMTMtOTQ5MDkzNDQxYjM3IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiQ1wvZzJva0wxSFJpM3NBQ3AzUXRNc2JsUUZOc1hkVUVQNkF0ZWRlRyticENiWVdHOGhOXC9qXC9MTmRCbVVIbG11UyJ9 x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dts] [PATCH v1] test_plans: Add flow_classify_softnic_test_plan.rst X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 23 Dec 2018 07:02:31 -0000 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 envi= ronment. .git/rebase-apply/patch:77: trailing whitespace. .git/rebase-apply/patch:350: trailing whitespace. sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::1", dst=3D"0::1")/= UDP(sport=3D31, dport=3D41)/Raw('x'*48), iface=3D"enp131s0f3") .git/rebase-apply/patch:351: trailing whitespace. sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::2", dst=3D"0::2")/= TCP(sport=3D32, dport=3D42)/Raw('x'*48), iface=3D"enp131s0f3") .git/rebase-apply/patch:352: trailing whitespace. sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::3", dst=3D"0::3",n= h=3D132)/SCTP(sport=3D33, dport=3D43)/Raw('x'*48), iface=3D"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-str= ing without end-string. flow_classify_softnic_test_plan.rst:354: WARNING: Title underline too short > -----Original Message----- > From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Peng Yuan > Sent: Monday, December 10, 2018 5:26 PM > To: dts@dpdk.org > Cc: Peng, Yuan > Subject: [dts] [PATCH v1] test_plans: Add flow_classify_softnic_test_plan= .rst >=20 > Add a new test plan "flow_classify_softnic_test_plan.rst" to test_plans. >=20 > Signed-off-by: Peng Yuan >=20 > 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. > + > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +Flow classification for softnic PMD > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > + > +Description > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +The SoftNIC allows building custom NIC pipelines in SW. The Soft NIC > pipeline > +is configurable through firmware (DPDK Packet Framework script). > + > +Prerequisites > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/firmware.cli,cpu_id=3D1,co= nn_po > rt=3D8086' \ > +-- -i --forward-mode=3Dsoftnic --portmask=3D0x10 > +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=3D./drivers/net/softnic/firmware.cli,cpu_id=3D1,co= nn_po > rt=3D8086' \ > +-- -i --forward-mode=3Dsoftnic --portmask=3D0x10 > +testpmd> set port tm hierarchy default 1 > +testpmd> start > + > +Test Case: ipv4 ACL table > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D > +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=3D./drivers/net/softnic/flow_ipv4_acl_firmware.cli= ,cp > u_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq=3D4 --txq= =3D4 > --disable-rss --portmask=3D0x10 > + > +Validate a rule, > +flow validate 4 group 0 ingress pattern eth / ipv4 proto mask 255 src ma= sk > 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 spe= c 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 sp= ec > 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=3D'00:00:00:00:01:00')/IP(src=3D'0.0.0.0', > dst=3D'2.0.0.0',proto=3D17)/UDP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'0.0.0.0', > dst=3D'2.64.0.0',proto=3D6)/TCP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'2.128.0.0', > dst=3D'0.0.0.0',proto=3D132)/SCTP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'0.0.0.0', > dst=3D'4.0.0.0',proto=3D17)/UDP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'0.0.0.0', > dst=3D'3.0.0.0',proto=3D17)/UDP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'0.0.0.0', > dst=3D'2.64.0.0',proto=3D17)/UDP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'2.128.0.0', > dst=3D'0.0.0.0',proto=3D132)/SCTP(sport=3D101, dport=3D200)/('X'*48), > iface=3D"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 =3D> QUEUE > +1 0 0 i-- ETH IPV4 TCP =3D> QUEUE > +2 0 0 i-- ETH IPV4 SCTP =3D> QUEUE > +3 0 0 i-- ETH IPV4 UDP =3D> 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 =3D> QUEUE > +2 0 0 i-- ETH IPV4 SCTP =3D> QUEUE > +3 0 0 i-- ETH IPV4 UDP =3D> QUEUE > +Send packets, pkt1 to port3, pkt2 can't be forwarded, pkt3 to port1, pkt= 4 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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv4_5tuple_hash_firm= w > are.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq= =3D4 > --txq=3D4 --disable-rss --portmask=3D0x10 > + > +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 d= st > 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=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.1', > dst=3D'200.0.0.1',proto=3D6)/TCP(sport=3D101, dport=3D201)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.2', > dst=3D'200.0.0.2',proto=3D17)/UDP(sport=3D102, dport=3D202)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.3', > dst=3D'200.0.0.3',proto=3D132)/SCTP(sport=3D103, dport=3D203)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.4', > dst=3D'200.0.0.4',proto=3D17)/UDP(sport=3D104, dport=3D204)/('X'*48), > iface=3D"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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv4_addr_hash_firmwa= r > e.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq= =3D4 --txq=3D4 > --disable-rss --portmask=3D0x10 > + > +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 prot= o > spec 17 / udp src mask 0 dst mask 0 src spec 100 dst spec 200 / end actio= ns > 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 prot= o > spec 6 / tcp src mask 0 dst mask 0 src spec 100 dst spec 200 / end action= s > 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 prot= o > spec 132 / sctp src mask 0 dst mask 0 src spec 100 dst spec 200 / end act= ions > 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 / en= d > 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 que= ue > 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 que= ue > 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 que= ue > 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=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.1', > dst=3D'200.0.0.1',proto=3D6)/TCP(sport=3D101, dport=3D201)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.2', > dst=3D'200.0.0.2',proto=3D17)/UDP(sport=3D102, dport=3D202)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.3', > dst=3D'200.0.0.3',proto=3D132)/SCTP(sport=3D103, dport=3D203)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.4', > dst=3D'200.0.0.4')/('X'*48), iface=3D"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=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.1', > dst=3D'200.0.0.1',proto=3D6)/TCP(sport=3D101, dport=3D201)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.2', > dst=3D'200.0.1.2',proto=3D17)/UDP(sport=3D102, dport=3D202)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.3', > dst=3D'200.0.2.3',proto=3D132)/SCTP(sport=3D103, dport=3D203)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.4', > dst=3D'200.0.3.4')/('X'*48), iface=3D"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=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.1', > dst=3D'200.0.0.1',proto=3D6)/TCP(sport=3D100, dport=3D201)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.2', > dst=3D'200.0.1.2',proto=3D17)/UDP(sport=3D101, dport=3D202)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.3', > dst=3D'200.0.2.3',proto=3D132)/SCTP(sport=3D102, dport=3D203)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.2', > dst=3D'200.0.1.2',proto=3D17)/UDP(sport=3D103, dport=3D202)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'100.0.0.4', > dst=3D'200.0.3.4')/('X'*48), iface=3D"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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D > +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=3D./drivers/net/softnic/flow_ipv6_acl_firmware.cli= ,cp > u_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq=3D4 --txq= =3D4 > --disable-rss --portmask=3D0x10 > + > +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 q= ueue > 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 qu= eue > 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=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:5789", dst=3D"2001::2",nh=3D17)/UDP(sport=3D32, > dport=3D33)/Raw('x'*48), iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:6789", dst=3D"2001::2",nh=3D6)/TCP(sport=3D32, > dport=3D33)/Raw('x'*48), iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:7789", dst=3D"2001::2",nh=3D132)/SCTP(sport=3D32, > dport=3D33)/Raw('x'*48), iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:8789", dst=3D"2001::2",nh=3D17)/UDP(sport=3D101, > dport=3D33)/Raw('x'*48), iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:9789", dst=3D"2001::2",nh=3D17)/UDP(sport=3D32, > dport=3D33)/Raw('x'*48), iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:8789", dst=3D"2001::2",nh=3D17)/UDP(sport=3D32, > dport=3D33)/Raw('x'*48), iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:6789", dst=3D"2001::2",nh=3D17)/TCP(sport=3D32, > dport=3D33)/Raw('x'*48), iface=3D"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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv6_addr_hash_firmwa= r > e.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq= =3D4 --txq=3D4 > --disable-rss --portmask=3D0x10 > + > +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 q= ueue > 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 q= ueue > 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 q= ueue > 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 q= ueue > 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 q= ueue > 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 q= ueue > 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 q= ueue > 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 q= ueue > 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=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:5789", dst=3D"2001::2")/TCP(sport=3D32, dport=3D33)/Raw('x'*= 48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:6789", dst=3D"2001::2")/TCP(sport=3D32, dport=3D33)/Raw('x'*= 48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:7789", dst=3D"2001::2")/TCP(sport=3D32, dport=3D33)/Raw('x'*= 48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:8789", dst=3D"2001::2")/TCP(sport=3D32, dport=3D33)/Raw('x'*= 48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:9789", dst=3D"2001::2")/TCP(sport=3D32, dport=3D33)/Raw('x'*= 48), > iface=3D"enp131s0f3") > + > +b) match ipv6 dst_addr: > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::1", > dst=3D"ABCD:EF01:2345:6789:ABCD:EF01:2345:5789")/TCP(sport=3D32, > dport=3D33)/Raw('x'*48), iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::1", > dst=3D"ABCD:EF01:2345:6789:ABCD:EF01:2345:6789")/TCP(sport=3D32, > dport=3D33)/Raw('x'*48), iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::1", > dst=3D"ABCD:EF01:2345:6789:ABCD:EF01:2345:7789")/TCP(sport=3D32, > dport=3D33)/Raw('x'*48), iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::1", > dst=3D"ABCD:EF01:2345:6789:ABCD:EF01:2345:8789")/TCP(sport=3D32, > dport=3D33)/Raw('x'*48), iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::1", > dst=3D"ABCD:EF01:2345:6789:ABCD:EF01:2345:9789")/TCP(sport=3D32, > dport=3D33)/Raw('x'*48), iface=3D"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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv6_5tuple_hash_firm= w > are.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq= =3D4 > --txq=3D4 --disable-rss --portmask=3D0x10 > + > +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 655= 35 > 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 655= 35 > 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=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::1", > dst=3D"0::1")/UDP(sport=3D31, dport=3D41)/Raw('x'*48), iface=3D"enp131s0f= 3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::2", > dst=3D"0::2")/TCP(sport=3D32, dport=3D42)/Raw('x'*48), iface=3D"enp131s0f= 3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::3", > dst=3D"0::3",nh=3D132)/SCTP(sport=3D33, dport=3D43)/Raw('x'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::4", > dst=3D"0::4")/TCP(sport=3D34, dport=3D44)/Raw('x'*48), iface=3D"enp131s0f= 3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::1", > dst=3D"0::1")/TCP(sport=3D31, dport=3D41)/Raw('x'*48), iface=3D"enp131s0f= 3") > + > +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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv4_addr_hash_firmwa= r > e.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq= =3D4 --txq=3D4 > --disable-rss --portmask=3D0x10 > + > +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 add= r. > +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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D > +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=3D./drivers/net/softnic/flow_ipv6_5tuple_hash_firm= w > are.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq= =3D4 > --txq=3D4 --disable-rss --portmask=3D0x10 > + > +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 wi= th > 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 q= ueue > 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 add= r. > + > +Test Case: ipv4 hash table rss action > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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 28= 2 > 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=3D./drivers/net/softnic/flow_ipv4_rss_firmware.cli= ,cp > u_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq=3D4 --txq= =3D4 > --disable-rss --portmask=3D0x10 > + > +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 d= st > 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 10= 0 > 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 d= st > 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 d= st > 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 d= st > 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=3D"00:00:00:00:01:00")/IP(src=3D"1.10.11.0", > dst=3D"2.20.21.0")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D"1.10.11.1", > dst=3D"2.20.21.1")/UDP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D"1.10.11.2", > dst=3D"2.20.21.2")/SCTP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D"1.10.11.3", > dst=3D"2.20.21.3")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D"1.10.11.3", > dst=3D"2.20.21.3")/TCP(sport=3D101, dport=3D200)/Raw('x'*48), > iface=3D"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=3D"00:00:00:00:01:00")/IP(src=3D"1.10.11.0", > dst=3D"2.20.21.0")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"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=3D"00:00:00:00:01:00")/IP(src=3D"1.10.12.0", > dst=3D"2.20.21.0")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"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=3D"00:00:00:00:01:00")/IP(src=3D"1.10.13.0", > dst=3D"2.20.21.0")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"enp131s0f3") > +The packet was not be forwarded to any port. > +c) > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D"1.10.11.0", > dst=3D"2.20.21.0")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"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=3D"00:00:00:00:01:00")/IP(src=3D"1.10.11.0", > dst=3D"2.20.21.1")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"enp131s0f3") > +Set the IP src address from 1.10.0.0 to 1.10.255.255, or set sport or dp= ort > to 0-65535, the packet was forwarded to port2 or port3. > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D"2.10.11.0", > dst=3D"2.20.21.1")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"enp131s0f3") > +Set the IP src address from 1.10.0.0 to 1.10.255.255, or set sport or dp= ort > to 0-65535, the packet was forwarded to port1 or port2. > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D"1.10.11.0", > dst=3D"2.20.21.2")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"enp131s0f3") > +The packet weren't be forwarded to any port. > + > +Test Case: ipv6 hash table rss action > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv6_rss_firmware.cli= ,cp > u_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq=3D4 --txq= =3D4 > --disable-rss --portmask=3D0x10 > + > +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 655= 35 > 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 655= 35 > 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:ff= ff: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 r= ss > 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:ff= ff: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 r= ss > 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 ma= sk > 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=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::1", > dst=3D"0::1")/UDP(sport=3D31, dport=3D41)/Raw('x'*48), iface=3D"enp131s0f= 3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::2", > dst=3D"0::2")/TCP(sport=3D32, dport=3D42)/Raw('x'*48), iface=3D"enp131s0f= 3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::3", > dst=3D"0::3",nh=3D132)/SCTP(sport=3D33, dport=3D43)/Raw('x'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::4", > dst=3D"0::4")/TCP(sport=3D34, dport=3D44)/Raw('x'*48), iface=3D"enp131s0f= 3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::1", > dst=3D"0::1")/TCP(sport=3D31, dport=3D41)/Raw('x'*48), iface=3D"enp131s0f= 3") > +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=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2345:0", dst=3D"0::1")/UDP(sport=3D31, dport=3D41)/Raw('x'*48), > iface=3D"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=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2346:0", dst=3D"0::1")/UDP(sport=3D31, dport=3D41)/Raw('x'*48), > iface=3D"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=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:6789:A= B > CD:EF01:2347:0", dst=3D"0::1")/UDP(sport=3D31, dport=3D41)/Raw('x'*48), > iface=3D"enp131s0f3") > +The packet was not be forwarded to any port. > +c) > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::1", > dst=3D"1001::1")/TCP(sport=3D31, dport=3D41)/Raw('x'*48), iface=3D"enp131= s0f3") > +Set the IPv6 dst address from 1001::0 to 1001::FFFF, the packet was > forwarded to port0. > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::2", > dst=3D"1001::2")/TCP(sport=3D32, dport=3D42)/Raw('x'*48), iface=3D"enp131= s0f3") > +Set the IPv6 dst address from 1001::0 to 1001::FFFF, the packet was > forwarded to port2 or port3. > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::1", > dst=3D"2001::3")/TCP(sport=3D33, dport=3D43)/Raw('x'*48), iface=3D"enp131= s0f3") > +Set the IPv6 dst address from 2001::0 to 2001::FFFF, the packet was > forwarded to port1 or port2. > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"2001::1", > dst=3D"0::1")/TCP(sport=3D31, dport=3D41)/Raw('x'*48), iface=3D"enp131s0f= 3") > +The packet weren't be forwarded to any port. > + > +Test Case: ipv4 ACL table jump action > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv4_acl_jump_firmwar= e. > cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq=3D2= --txq=3D2 > --disable-rss --portmask=3D0x4 > + > +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 spe= c 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 spe= c 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=3D"00:00:00:00:01:00")/IP(src=3D"0.0.0.0", > dst=3D"2.0.0.0")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D"0.0.0.0", > dst=3D"2.64.0.0")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv4_hash_jump_firmwa= r > e.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq= =3D2 --txq=3D2 > --disable-rss --portmask=3D0x4 > + > +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=3D'00:00:00:00:01:00')/IP(src=3D'1.10.11.0', > dst=3D'2.20.21.0',proto=3D6)/TCP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'1.10.11.1', > dst=3D'2.20.21.1',proto=3D6)/TCP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"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 forwa= rded > 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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv4_acl_hash_jump_fi= r > mware.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --r= xq=3D2 > --txq=3D2 --disable-rss --portmask=3D0x4 > + > +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 d= st > 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 d= st > 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=3D'00:00:00:00:01:00')/IP(src=3D'1.10.11.0', > dst=3D'2.20.21.0',proto=3D6)/TCP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'1.10.11.1', > dst=3D'2.20.21.1',proto=3D6)/TCP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"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 forwa= rded > to any port. > + > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'1.10.11.0', > dst=3D'2.20.21.0',proto=3D6)/TCP(sport=3D101, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'1.10.11.1', > dst=3D'2.20.21.1',proto=3D6)/TCP(sport=3D100, dport=3D201)/('X'*48), > iface=3D"enp131s0f3") > + > +The two packets can't be forwarded to any port. > + > +Test Case: ipv4 HASH jump to ACL table > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv4_hash_acl_jump_fi= r > mware.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --r= xq=3D2 > --txq=3D2 --disable-rss --portmask=3D0x4 > + > +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=3D'00:00:00:00:01:00')/IP(src=3D'1.10.11.0', > dst=3D'2.20.21.0',proto=3D6)/TCP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'1.10.11.1', > dst=3D'2.20.21.1',proto=3D6)/TCP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'1.10.11.0', > dst=3D'2.20.21.2',proto=3D6)/TCP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"enp131s0f3") > +sendp(Ether(dst=3D'00:00:00:00:01:00')/IP(src=3D'1.10.11.1', > dst=3D'2.20.21.3',proto=3D6)/TCP(sport=3D100, dport=3D200)/('X'*48), > iface=3D"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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv6_acl_jump_firmwar= e. > cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq=3D2= --txq=3D2 > --disable-rss --portmask=3D0x4 > + > +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 10= 0 > 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 655= 35 > 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 10= 0 > 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 10= 0 > dst spec 200 / end actions jump group 1 / end > + > +3. sent packet, verify the packets were forwarded to the expected ports. > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::1", > dst=3D"2001::1")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::1", > dst=3D"2001::2")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::2", > dst=3D"2001::1")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::2", > dst=3D"2001::2")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > + > +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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv6_hash_jump_firmwa= r > e.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --rxq= =3D2 --txq=3D2 > --disable-rss --portmask=3D0x4 > + > +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 655= 35 > 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 655= 35 > 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=3D"00:00:00:00:01:00")/IPv6(src=3D"0::1", > dst=3D"2001::1")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::2", > dst=3D"2001::2")/UDP(sport=3D100, dport=3D200)/Raw('x'*48), > iface=3D"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 forwa= rded > 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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv6_acl_hash_jump_fi= r > mware.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --r= xq=3D2 > --txq=3D2 --disable-rss --portmask=3D0x4 > + > +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 655= 35 > 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 655= 35 > 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 10= 0 > 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 10= 0 > dst spec 200 / end actions jump group 1 / end > + > +3. sent packet, verify the packets were forwarded to the expected ports. > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::1", > dst=3D"2001::1")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::2", > dst=3D"2001::2")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::3", > dst=3D"2001::1")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::4", > dst=3D"2001::2")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > + > +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 > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +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=3D./drivers/net/softnic/flow_ipv6_hash_acl_jump_fi= r > mware.cli,cpu_id=3D1,conn_port=3D8086' -- -i --forward-mode=3Dsoftnic --r= xq=3D2 > --txq=3D2 --disable-rss --portmask=3D0x4 > + > +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 10= 0 > 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 s= rc > 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 s= rc > 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 s= rc > 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=3D"00:00:00:00:01:00")/IPv6(src=3D"0::1", > dst=3D"2001::1")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::2", > dst=3D"2001::2")/TCP(sport=3D100, dport=3D200)/Raw('x'*48), iface=3D"enp1= 31s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::1", > dst=3D"2001::1")/TCP(sport=3D100, dport=3D201)/Raw('x'*48), iface=3D"enp1= 31s0f3") > +sendp(Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"0::2", > dst=3D"2001::2")/TCP(sport=3D100, dport=3D202)/Raw('x'*48), iface=3D"enp1= 31s0f3") > + > +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