From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 5F9D61B3DA for ; Mon, 14 Jan 2019 03:06:02 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Jan 2019 18:06:01 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,475,1539673200"; d="scan'208";a="135534746" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga004.fm.intel.com with ESMTP; 13 Jan 2019 18:06:01 -0800 Received: from fmsmsx156.amr.corp.intel.com (10.18.116.74) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 13 Jan 2019 18:06:00 -0800 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by fmsmsx156.amr.corp.intel.com (10.18.116.74) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 13 Jan 2019 18:06:00 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.63]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.159]) with mapi id 14.03.0415.000; Mon, 14 Jan 2019 10:05:58 +0800 From: "Zhu, WenhuiX" To: "Li, WenjieX A" , "dts@dpdk.org" CC: "Li, WenjieX A" Thread-Topic: [dts] [PATCH V2] add metering and policing test plan Thread-Index: AQHUqXEaiMp89xflB0i3/WX31bevXaWuByKA Date: Mon, 14 Jan 2019 02:05:57 +0000 Message-ID: References: <1547185820-25467-1-git-send-email-wenjiex.a.li@intel.com> In-Reply-To: <1547185820-25467-1-git-send-email-wenjiex.a.li@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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 V2] add metering and policing test plan 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: Mon, 14 Jan 2019 02:06:03 -0000 Tested-by : Zhu, WenhuiX -----Original Message----- From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Wenjie Li Sent: Friday, January 11, 2019 1:50 PM To: dts@dpdk.org Cc: Li, WenjieX A Subject: [dts] [PATCH V2] add metering and policing test plan add new test plan of metering and policing. Signed-off-by: Wenjie Li --- .../metering_and_policing_test_plan.rst | 858 ++++++++++++++++++ 1 file changed, 858 insertions(+) create mode 100644 test_plans/metering_and_policing_test_plan.rst diff --git a/test_plans/metering_and_policing_test_plan.rst b/test_plans/me= tering_and_policing_test_plan.rst new file mode 100644 index 0000000..2ed23de --- /dev/null +++ b/test_plans/metering_and_policing_test_plan.rst @@ -0,0 +1,858 @@ +.. Copyright (c) <2015-2018>, 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 +metering and policing +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Description +----------- +The SoftNIC allows building custom NIC pipelines in SW. The Soft NIC=20 +pipeline is configurable through firmware (DPDK Packet Framework script). + +In RFC2698, the behavior of the Meter is specified as below: +When a packet of size B bytes arrives at time t, the following happens=20 +if the trTCM is configured to operate: + +* in the Color-Blind mode: + + * If Tp(t)-B < 0, the packet is red, else + * If Tc(t)-B < 0, the packet is yellow and Tp is decremented by B,=20 + else + * The packet is green and both Tp and Tc are decremented by B. + +* in the Color-Aware mode: + + * If the packet has been precolored as red or if Tp(t)-B < 0, the=20 + packet is red, else + * If the packet has been precolored as yellow or if Tc(t)-B < 0, the=20 + packet is yellow and Tp is decremented by B, else + * The packet is green and both Tp and Tc are decremented by B. + +DPDK meter library (librte_meter) implements these two mode separately=20 +and made through different APIs. In table meter action implementation,=20 +always color aware mode API is invoked regardless of dscp table. + +Prerequisites +------------- +The DUT must have four 10G Ethernet ports connected to four ports on=20 +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 + +1. change ./drivers/net/softnic/firmware.cli to meet the specific test env= ironment. + +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,conn_port=3D8086' \ + -- -i --forward-mode=3Dsoftnic --portmask=3D0x10 + testpmd> start + +3. start softnic with default hierarchy Qos with following command=20 +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,conn_port=3D8086' \ + -- -i --forward-mode=3Dsoftnic --portmask=3D0x10 + testpmd> set port tm hierarchy default 1 + testpmd> start + +Test Case 1: ipv4 ACL table RFC2698 GYR +--------------------------------------- +1. Edit meter_and_policing_firmware.cli to change "table action" and=20 +"pipeline table" as below, + + :: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + 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 23-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D2 --txq=3D2 --portmask=3D0x4 + + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes + + :: + + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 312500000= 0 400 500 + testpmd> create port meter 2 0 0 yes g y r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 2 dst spec 2 / end actions meter mtr_id 0 / queue index 0 / end + testpmd> start + +3. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + a. send a packet larger than PBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)],=20 + iface=3D"enp131s0f3") + + The packet was forwarded to port 0. + + b. send a packet not larger than PBS but larger than CBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)],=20 + iface=3D"enp131s0f3") + + The packet was forwarded to port 0. + + c. send a packet not larger than CBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + The packet was forwarded to port 0. + +**Notes**: the CBS/PBS includes IP header(20 bytes) and TCP header(20 byte= s). +So when the payload is 460 bytes, the IP packet is 500 bytes. + + +Test Case 2: ipv4 ACL table RFC2698 GYD +--------------------------------------- +1. Edit meter_and_policing_firmware.cli to change "table action" and=20 +"pipeline table" as below, + + :: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + 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 23-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D2 --txq=3D2 --portmask=3D0x4 + + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes + :: + + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 312500000= 0 400 500 + testpmd> create port meter 2 0 0 yes g y d 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 2 dst spec 2 / end actions meter mtr_id 0 / queue index 0 / end + testpmd> start + +3. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + a. send a packet larger than PBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)],=20 + iface=3D"enp131s0f3") + + The packet was dropped. + + b. send a packet not larger than PBS but larger than CBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)],=20 + iface=3D"enp131s0f3") + + The packet was forwarded to port 0. + + + c. send a packet not larger than CBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + The packet was forwarded to port 0. + +Test Case 3: ipv4 ACL table RFC2698 GDR +--------------------------------------- +1. Edit meter_and_policing_firmware.cli to change "table action" and=20 +"pipeline table" as below, + + :: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + 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 23-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D2 --txq=3D2 --portmask=3D0x4 + + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes + :: + + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 312500000= 0 400 500 + testpmd> create port meter 2 0 0 yes g d r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 132 / sctp src mask 65535 dst mask 65535 src s= pec 2 dst spec 2 / end actions meter mtr_id 0 / queue index 1 / end + testpmd> start + +3. Configure the packets with specified src/dst IP address and SCTP dport/= sport. + + a. send a packet larger than PBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D132)/SCTP(sport=3D2,dport=3D2)/Raw(load=3D"P"*469)],=20 + iface=3D"enp131s0f3") + + The packet was forwarded to port 1. + + b. send a packet not larger than PBS but larger than CBS + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D132)/SCTP(sport=3D2,dport=3D2)/Raw(load=3D"P"*468)], ifa= ce=3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D132)/SCTP(sport=3D2,dport=3D2)/Raw(load=3D"P"*369)],=20 + iface=3D"enp131s0f3") + + The packets was dropped. + + c. send a packet not larger than CBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D132)/SCTP(sport=3D2,dport=3D2)/Raw(load=3D"P"*368)],=20 + iface=3D"enp131s0f3") + + The packet was forwarded to port 1. + +**Notes**: the CBS/PBS includes IP header(20 bytes) and SCTP header(12 byt= es). +So when the payload is 468 bytes, the IP packet is 500 bytes. + +Test Case 4: ipv4 ACL table RFC2698 DYR +--------------------------------------- +1. Edit meter_and_policing_firmware.cli to change "table action" and=20 +"pipeline table" as below, + + :: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + 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 23-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D2 --txq=3D2 --portmask=3D0x4 + + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes + :: + + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 312500000= 0 400 500 + testpmd> create port meter 2 0 0 yes d y r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 17 / udp src mask 65535 dst mask 65535 src spe= c 2 dst spec 2 / end actions meter mtr_id 0 / queue index 0 / end + testpmd> start + +3. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + a. send a packet larger than PBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D17)/UDP(sport=3D2,dport=3D2)/Raw(load=3D"P"*473)],=20 + iface=3D"enp131s0f3") + + The packet was forwarded to port 0. + + b. send a packet not larger than PBS but larger than CBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D17)/UDP(sport=3D2,dport=3D2)/Raw(load=3D"P"*373)],=20 + iface=3D"enp131s0f3") + + The packet was forwarded to port 0. + + c. send a packet not larger than CBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D17)/UDP(sport=3D2,dport=3D2)/Raw(load=3D"P"*372)],=20 + iface=3D"enp131s0f3") + + The packet was dropped. + +**Notes**: the CBS/PBS includes IP header(20 bytes) and UDP header(8 bytes= ). +So when the payload is 472 bytes, the IP packet is 500 bytes. + +Test Case 5: ipv4 ACL table RFC2698 DDD +--------------------------------------- +1. Edit meter_and_policing_firmware.cli to change "table action" and=20 +"pipeline table" as below, + + :: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + 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 23-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D2 --txq=3D2 --portmask=3D0x4 + + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes + :: + + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 312500000= 0 400 500 + testpmd> create port meter 2 0 0 yes d d d 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 2 dst spec 2 / end actions meter mtr_id 0 / queue index 0 / end + testpmd> start + +3. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + a. send a packet larger than PBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)],=20 + iface=3D"enp131s0f3") + + The packet was dropped. + + b. send a packet not larger than PBS but larger than CBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)],=20 + iface=3D"enp131s0f3") + + The packet was dropped. + + c. send a packet not larger than CBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + The packet was dropped. + +Test Case 6: ipv4 with same CBS and PBS GDR +------------------------------------------- +1. Edit meter_and_policing_firmware.cli to change "table action" and=20 +"pipeline table" as below, + + :: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + 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 23-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D2 --txq=3D2 --portmask=3D0x4 + + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes + :: + + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 312500000= 0 500 500 + testpmd> create port meter 2 0 0 yes g d r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 2 dst spec 2 / end actions meter mtr_id 0 / queue index 0 / end + testpmd> start + +3. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + a. send a packet larger than PBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)],=20 + iface=3D"enp131s0f3") + + The packet was forwarded to port 0. + + b. send a packet not larger than PBS + :: + + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)],=20 + iface=3D"enp131s0f3") + + The packet was forwarded to port 0. + +Test Case 7: ipv4 HASH table RFC2698 +------------------------------------ +1. Edit meter_and_policing_firmware.cli to change "table action" and=20 +"pipeline table" as below, + + :: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + pipeline RX table match hash ext key 16 mask 00FF0000FFFFFFFFFFFFFFFFF= FFFFFFF offset 278 buckets 16K size 65K action AP0 + flowapi map group 0 ingress pipeline RX table 0 + +2. Start softnic, + + :: + + ./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D2 --txq=3D2 --portmask=3D0x4 + + Add rules to table, + :: + + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 312500000= 0 400 500 + a)GYR + testpmd> create port meter 2 0 0 yes g y r 0 0 0 + b)GYD + testpmd> create port meter 2 0 0 yes g y d 0 0 0 + c)GDR + testpmd> create port meter 2 0 0 yes g d r 0 0 0 + d)DYR + testpmd> create port meter 2 0 0 yes d y r 0 0 0 + e)DDD + testpmd> create port meter 2 0 0 yes d d d 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 2 dst spec 2 / end actions meter mtr_id 0 / queue index 0 / end + testpmd> start + +3. Configure the packets with specified src/dst IP address and TCP dport/s= port. Send packets same as ACL table, there will be the same result with AC= L table. + +Test Case 8: ipv6 ACL table RFC2698 +----------------------------------- +1. Edit meter_and_policing_firmware.cli to change "table action" and=20 +"pipeline table" as below, + + :: + + table action profile AP0 ipv6 offset 270 fwd meter trtcm tc 1 stats pk= ts + 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 23-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D2 --txq=3D2 --portmask=3D0x4 + + Add rules to table, + :: + + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 312500000= 0 400 500 + testpmd> create port meter 2 0 0 yes g y d 0 0 0 + testpmd> create port meter 2 1 0 yes d y r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv6 proto mask 2= 55 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 6 / tcp src mask 65535 dst mask 65535 src spec 2 dst spec 2 / e= nd actions meter mtr_id 0 / queue index 0 / end + testpmd> flow create 2 group 0 ingress pattern eth / ipv6 proto mask 2= 55 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 65535 dst mask 65535 src spec 2 dst spec 2 / = end actions meter mtr_id 1 / queue index 1 / end + testpmd> start + testpmd> flow list 2 + ID Group Prio Attr Rule + 0 0 0 i-- ETH IPV6 TCP =3D> METER QUEUE + 1 0 0 i-- ETH IPV6 UDP =3D> METER QUEUE + +3. Configure the packets with specified src/dst IPv6 address and TCP dport= /sport. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:678= 9:ABCD:EF01:2345:5789",dst=3D"2001::1",nh=3D6)/TCP(sport=3D2,dport=3D2)/Raw= (load=3D"P"*441)], iface=3D"enp131s0f3") + The packet was dropped. + sendp([Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:678= 9:ABCD:EF01:2345:5789",dst=3D"2001::1",nh=3D6)/TCP(sport=3D2,dport=3D2)/Raw= (load=3D"P"*440)], iface=3D"enp131s0f3") + The packet was forwarded to port 0. + sendp([Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:678= 9:ABCD:EF01:2345:5789",dst=3D"2001::1",nh=3D6)/TCP(sport=3D2,dport=3D2)/Raw= (load=3D"P"*340)], iface=3D"enp131s0f3") + The packet was forwarded to port 0. + sendp([Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:678= 9:ABCD:EF01:2345:5789",dst=3D"2001::1",nh=3D17)/UDP(sport=3D2,dport=3D2)/Ra= w(load=3D"P"*453)], iface=3D"enp131s0f3") + The packet was forwarded to port 1. + sendp([Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:678= 9:ABCD:EF01:2345:5789",dst=3D"2001::1",nh=3D17)/UDP(sport=3D2,dport=3D2)/Ra= w(load=3D"P"*353)], iface=3D"enp131s0f3") + The packet was forwarded to port 1. + sendp([Ether(dst=3D"00:00:00:00:01:00")/IPv6(src=3D"ABCD:EF01:2345:678= 9:ABCD:EF01:2345:5789",dst=3D"2001::1",nh=3D17)/UDP(sport=3D2,dport=3D2)/Ra= w(load=3D"P"*352)], iface=3D"enp131s0f3") + The packet was dropped. + +**Notes**: TCP header covers 20 bytes, UDP header covers 8 bytes. +The CBS/PBS includes IPv6 header(40 bytes) and TCP/UDP header(20/8 bytes). +So when the payload of IPv6-TCP packet is 440 bytes, the IPv6 packet is 50= 0 bytes. +When the payload of IPv6-UDP packet is 452 bytes, the IPv6 packet is 500 b= ytes. + +Test Case 9: multiple meter and profile +--------------------------------------- +1. Edit meter_and_policing_firmware.cli to change "table action" and=20 +"pipeline table" as below, + + :: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + pipeline RX table match acl ipv4 offset 270 size 4K action AP0 + flowapi map group 0 ingress pipeline RX table 0 + +2. Start softnic, configure 4 ports, + + :: + + ./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D4 --txq=3D4 --portmask=3D0x10 + + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes + :: + + testpmd> add port meter profile trtcm_rfc2698 4 0 3125000000 312500000= 0 400 500 + testpmd> add port meter profile trtcm_rfc2698 4 1 3125000000 312500000= 0 300 400 + testpmd> create port meter 4 0 0 yes g y r 0 0 0 + testpmd> create port meter 4 1 0 yes g y d 0 0 0 + testpmd> create port meter 4 2 0 yes g d r 0 0 0 + testpmd> create port meter 4 3 0 yes d y r 0 0 0 + testpmd> create port meter 4 4 1 yes g y d 0 0 0 + testpmd> create port meter 4 5 1 yes g d r 0 0 0 + testpmd> create port meter 4 6 1 yes d y r 0 0 0 + testpmd> create port meter 4 128 1 yes d d d 0 0 0 + testpmd> flow create 4 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 0 dst spec 0 / end actions meter mtr_id 0 / queue index 0 / end + testpmd> flow create 4 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 1 dst spec 1 / end actions meter mtr_id 1 / queue index 1 / end + testpmd> flow create 4 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 2 dst spec 2 / end actions meter mtr_id 2 / queue index 2 / end + testpmd> flow create 4 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 3 dst spec 3 / end actions meter mtr_id 3 / queue index 3 / end + testpmd> flow create 4 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 4 dst spec 4 / end actions meter mtr_id 4 / queue index 0 / end + testpmd> flow create 4 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 5 dst spec 5 / end actions meter mtr_id 5 / queue index 1 / end + testpmd> flow create 4 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 6 dst spec 6 / end actions meter mtr_id 6 / queue index 2 / end + testpmd> flow create 4 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 7 dst spec 7 / end actions meter mtr_id 128 / queue index 3 / end + testpmd> flow create 4 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 8 dst spec 8 / end actions meter mtr_id 128 / queue index 0 / end + the last flow can't be created successfully with "METER: Meter already= attached to a flow: Invalid argument" + testpmd> start + testpmd> flow list 4 + ID Group Prio Attr Rule + 0 0 0 i-- ETH IPV4 TCP =3D> METER QUEUE + 1 0 0 i-- ETH IPV4 TCP =3D> METER QUEUE + 2 0 0 i-- ETH IPV4 TCP =3D> METER QUEUE + 3 0 0 i-- ETH IPV4 TCP =3D> METER QUEUE + 4 0 0 i-- ETH IPV4 TCP =3D> METER QUEUE + 5 0 0 i-- ETH IPV4 TCP =3D> METER QUEUE + 6 0 0 i-- ETH IPV4 TCP =3D> METER QUEUE + 7 0 0 i-- ETH IPV4 TCP =3D> METER QUEUE + +3. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + pkt1: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',ds= t=3D'2.20.21.22',proto=3D6)/TCP(sport=3D0,dport=3D0)/Raw(load=3D"P"*461)], = iface=3D"enp131s0f3") + pkt2: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',ds= t=3D'2.20.21.22',proto=3D6)/TCP(sport=3D0,dport=3D0)/Raw(load=3D"P"*460)], = iface=3D"enp131s0f3") + pkt3: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',ds= t=3D'2.20.21.22',proto=3D6)/TCP(sport=3D0,dport=3D0)/Raw(load=3D"P"*360)], = iface=3D"enp131s0f3") + pkt1/2/3 were forwarded to port 0 + pkt4: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',ds= t=3D'2.20.21.22',proto=3D6)/TCP(sport=3D1,dport=3D1)/Raw(load=3D"P"*461)], = iface=3D"enp131s0f3") + pkt5: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',ds= t=3D'2.20.21.22',proto=3D6)/TCP(sport=3D1,dport=3D1)/Raw(load=3D"P"*460)], = iface=3D"enp131s0f3") + pkt6: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',ds= t=3D'2.20.21.22',proto=3D6)/TCP(sport=3D1,dport=3D1)/Raw(load=3D"P"*360)], = iface=3D"enp131s0f3") + pkt4 was dropped, pkt5/6 were forwarded to port1 + pkt7: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',ds= t=3D'2.20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], = iface=3D"enp131s0f3") + pkt8: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',ds= t=3D'2.20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], = iface=3D"enp131s0f3") + pkt9: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',ds= t=3D'2.20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*361)], = iface=3D"enp131s0f3") + pkt10: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],= iface=3D"enp131s0f3") + pkt8/9 were dropped, pkt7/10 were forwarded to port2 + pkt11: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D3,dport=3D3)/Raw(load=3D"P"*461)],= iface=3D"enp131s0f3") + pkt12: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D3,dport=3D3)/Raw(load=3D"P"*361)],= iface=3D"enp131s0f3") + pkt13: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D3,dport=3D3)/Raw(load=3D"P"*360)],= iface=3D"enp131s0f3") + pkt13 was dropped, pkt11/12 were forwarded to port3 + pkt14: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D4,dport=3D4)/Raw(load=3D"P"*361)],= iface=3D"enp131s0f3") + pkt15: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D4,dport=3D4)/Raw(load=3D"P"*360)],= iface=3D"enp131s0f3") + pkt16: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D4,dport=3D4)/Raw(load=3D"P"*260)],= iface=3D"enp131s0f3") + pkt14 was dropped, pkt15/16 were forwarded to port0 + pkt17: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D5,dport=3D5)/Raw(load=3D"P"*361)],= iface=3D"enp131s0f3") + pkt18: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D5,dport=3D5)/Raw(load=3D"P"*360)],= iface=3D"enp131s0f3") + pkt19: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D5,dport=3D5)/Raw(load=3D"P"*261)],= iface=3D"enp131s0f3") + pkt20: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D5,dport=3D5)/Raw(load=3D"P"*260)],= iface=3D"enp131s0f3") + pkt18/19 were dropped, pkt17/20 were forwarded to port1 + pkt21: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D6,dport=3D6)/Raw(load=3D"P"*361)],= iface=3D"enp131s0f3") + pkt22: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D6,dport=3D6)/Raw(load=3D"P"*261)],= iface=3D"enp131s0f3") + pkt23: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D6,dport=3D6)/Raw(load=3D"P"*260)],= iface=3D"enp131s0f3") + pkt23 was dropped, pkt21/22 were forwarded to port2 + pkt24: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D7,dport=3D7)/Raw(load=3D"P"*361)],= iface=3D"enp131s0f3") + pkt25: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D7,dport=3D7)/Raw(load=3D"P"*261)],= iface=3D"enp131s0f3") + pkt26: sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',d= st=3D'2.20.21.22',proto=3D6)/TCP(sport=3D7,dport=3D7)/Raw(load=3D"P"*260)],= iface=3D"enp131s0f3") + pkt24/25/26 were dropped + +**Notes**: if create one flow with a mtr_id, then create the flow again=20 +with another mtr_id, the last flow rule will overlap the previous one. +so the first flow rule will not take effect, just the last one can take ef= fect. + +Test Case 10: ipv4 RFC2698 pre-colored red by DSCP table +-------------------------------------------------------- +1. Set the DSCP table in dscp.sh, set all the packets from every tc and=20 +every queue to red color. Edit meter_and_policing_firmware.cli to=20 +change "table action" and "pipeline table" as below, + + :: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + pipeline RX table match acl ipv4 offset 270 size 4K action AP0 + pipeline RX table 0 dscp /root/dpdk/drivers/net/softnic/dscp_red.sh + flowapi map group 0 ingress pipeline RX table 0 + +2. Start softnic, + + :: + + ./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D2 --txq=3D2 --portmask=3D0x4 + + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes + :: + + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 312500000= 0 400 500 + testpmd> create port meter 2 0 0 yes g y r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 2 dst spec 2 / end actions meter mtr_id 0 / queue index 0 / end + testpmd> start + +3. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + All the packets were forwarded to port 0. + +4. Create another meter to drop all the packets with red color, + + :: + + testpmd> create port meter 2 1 0 yes g y d 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto=20 + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec=20 + 1.10.11.12 dst spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst=20 + mask 65535 src spec 2 dst spec 2 / end actions meter mtr_id 1 / queue=20 + index 0 / end + +5. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + All the packets were dropped. + +6. Create another meter to drop all the packets with yellow color, + + :: + + testpmd> create port meter 2 2 0 yes g d r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto=20 + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec=20 + 1.10.11.12 dst spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst=20 + mask 65535 src spec 2 dst spec 2 / end actions meter mtr_id 2 / queue=20 + index 0 / end + +7. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + All the packets were forwarded to port 0 + +8. Create another meter to drop all the packets with green color, + + :: + + testpmd> create port meter 2 3 0 yes d y r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto=20 + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec=20 + 1.10.11.12 dst spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst=20 + mask 65535 src spec 2 dst spec 2 / end actions meter mtr_id 3 / queue=20 + index 0 / end + +9. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + All the packets were forwarded to port 0 + +Test Case 11: ipv4 RFC2698 pre-colored yellow by DSCP table +----------------------------------------------------------- +1. Set the DSCP table in dscp.sh, set all the packets from every tc and ev= ery queue to yellow color. + + Edit meter_and_policing_firmware.cli to change "table action" and=20 + "pipeline table" as below, + :: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + pipeline RX table match acl ipv4 offset 270 size 4K action AP0 + pipeline RX table 0 dscp /root/dpdk/drivers/net/softnic/dscp_yellow.sh + flowapi map group 0 ingress pipeline RX table 0 + +2. Start softnic, + + :: + + ./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D2 --txq=3D2 --portmask=3D0x4 + + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes + :: + + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 312500000= 0 400 500 + testpmd> create port meter 2 0 0 yes g y r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 2 dst spec 2 / end actions meter mtr_id 0 / queue index 0 / end + testpmd> start + +3. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + All the packets were forwarded to port 0. + +4. Create another meter to drop all the packets with red color, + + :: + + testpmd> create port meter 2 1 0 yes g y d 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto=20 + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec=20 + 1.10.11.12 dst spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst=20 + mask 65535 src spec 2 dst spec 2 / end actions meter mtr_id 1 / queue=20 + index 0 / end + +5. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + pkt1 was dropped. + pkt2 and pkt3 were forwarded to port 0. + +6. Create another meter to drop all the packets with yellow color, + + :: + + testpmd> create port meter 2 2 0 yes g d r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto=20 + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec=20 + 1.10.11.12 dst spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst=20 + mask 65535 src spec 2 dst spec 2 / end actions meter mtr_id 2 / queue=20 + index 0 / end + +7. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + pkt1 was forwarded to port 0. + pkt2 and pkt3 were dropped. + +8. Create another meter to drop all the packets with green color, + + :: + + testpmd> create port meter 2 3 0 yes d y r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto=20 + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec=20 + 1.10.11.12 dst spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst=20 + mask 65535 src spec 2 dst spec 2 / end actions meter mtr_id 3 / queue=20 + index 0 / end + +9. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + All the packets were forwarded to port 0 + +Test Case 12: ipv4 RFC2698 pre-colored green by DSCP table +---------------------------------------------------------- +1. Set the DSCP table in dscp.sh, set all the packets from every tc and ev= ery queue to green color. + + Edit meter_and_policing_firmware.cli to change "table action" and=20 + "pipeline table" as below, + :: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + pipeline RX table match acl ipv4 offset 270 size 4K action AP0 + pipeline RX table 0 dscp /root/dpdk/drivers/net/softnic/dscp_green.sh + flowapi map group 0 ingress pipeline RX table 0 + +2. Start softnic, + + :: + + ./x86_64-native-linuxapp-gcc/app/testpmd -l 23-25 -n 4 --vdev=20 + 'net_softnic0,firmware=3D/root/dpdk/drivers/net/softnic/meter_and_polici + ng_firmware.cli,cpu_id=3D0,conn_port=3D8086' -- -i --forward-mode=3Dsoftn= ic=20 + --rxq=3D2 --txq=3D2 --portmask=3D0x4 + + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes + :: + + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 312500000= 0 400 500 + testpmd> create port meter 2 0 0 yes g y r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto mask 2= 55 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 ds= t spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst mask 65535 src spec= 2 dst spec 2 / end actions meter mtr_id 0 / queue index 0 / end + testpmd> start + +3. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + All the packets were forwarded to port 0. + +4. Create another meter to drop all the packets with red color, + + :: + + testpmd> create port meter 2 1 0 yes g y d 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto=20 + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec=20 + 1.10.11.12 dst spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst=20 + mask 65535 src spec 2 dst spec 2 / end actions meter mtr_id 1 / queue=20 + index 0 / end + +5. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + pkt1 was dropped. + pkt2 and pkt3 were forwarded to port 0. + +6. Create another meter to drop all the packets with yellow color, + + :: + + testpmd> create port meter 2 2 0 yes g d r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto=20 + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec=20 + 1.10.11.12 dst spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst=20 + mask 65535 src spec 2 dst spec 2 / end actions meter mtr_id 2 / queue=20 + index 0 / end + +7. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + pkt1 and pkt3 were forwarded to port 0. + pkt2 was dropped. + +8. Create another meter to drop all the packets with green color, + + :: + + testpmd> create port meter 2 3 0 yes d y r 0 0 0 + testpmd> flow create 2 group 0 ingress pattern eth / ipv4 proto=20 + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec=20 + 1.10.11.12 dst spec 2.20.21.22 proto spec 6 / tcp src mask 65535 dst=20 + mask 65535 src spec 2 dst spec 2 / end actions meter mtr_id 3 / queue=20 + index 0 / end + +9. Configure the packets with specified src/dst IP address and TCP dport/s= port. + + :: + + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*461)], iface= =3D"enp131s0f3") + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2= .20.21.22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*460)], iface= =3D"enp131s0f3") + =20 + sendp([Ether(dst=3D"00:00:00:00:01:00")/IP(src=3D'1.10.11.12',dst=3D'2.20= .21 + .22',proto=3D6)/TCP(sport=3D2,dport=3D2)/Raw(load=3D"P"*360)],=20 + iface=3D"enp131s0f3") + + pkt1 and pkt2 were forwarded to port 0. + pkt3 was dropped. + +Test Case 13: ipv4 RFC2698 pre-colored by default DSCP table +------------------------------------------------------------ +1. Set the DSCP table in dscp.sh, + + The default DSCP table translate all input packets dscp values=20 + (0...64) to 0 0 0 which means traffic class 0, queue id 0 , color 0 (i.e= green). + + Edit meter_and_policing_firmware.cli to change "table action" and "pipel= ine table" as below,:: + + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pk= ts + pipeline RX table match acl ipv4 offset 270 size 4K action AP0 + pipeline RX table 0 dscp /root/dpdk/drivers/net/softnic/dscp_default.s= h + flowapi map group 0 ingress pipeline RX table 0 + +2. Execute the steps2-9 of the case pre-colored green by DSCP table, got t= he same result. -- 2.17.2