* [dts] [PATCH V1] add metering and policing test plan
@ 2018-12-28 10:24 Wenjie Li
2018-12-28 10:34 ` Zhu, WenhuiX
2018-12-29 7:36 ` Tu, Lijuan
0 siblings, 2 replies; 3+ messages in thread
From: Wenjie Li @ 2018-12-28 10:24 UTC (permalink / raw)
To: dts; +Cc: Wenjie Li
add new test plan
Signed-off-by: Wenjie Li <wenjiex.a.li@intel.com>
---
.../metering_and_policing_test_plan.rst | 859 ++++++++++++++++++
1 file changed, 859 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/metering_and_policing_test_plan.rst
new file mode 100644
index 0000000..0590a5d
--- /dev/null
+++ b/test_plans/metering_and_policing_test_plan.rst
@@ -0,0 +1,859 @@
+.. 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.
+
+=====================
+metering and policing
+=====================
+
+Description
+-----------
+The SoftNIC allows building custom NIC pipelines in SW. The Soft NIC 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 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, 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 packet is red, else
+. If the packet has been precolored as yellow or if Tc(t)-B < 0, the 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
+and made through different APIs. In table meter action implementation,
+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
+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 environment.
+
+2. start softnic with following command line,
+
+ ::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25 -n 4 \
+ --vdev 'net_softnic0,firmware=./drivers/net/softnic/firmware.cli,cpu_id=1,conn_port=8086' \
+ -- -i --forward-mode=softnic --portmask=0x10
+ testpmd> start
+
+3. start softnic with default hierarchy Qos with following command line,
+
+ ::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25 -n 4 \
+ --vdev 'net_softnic0,firmware=./drivers/net/softnic/firmware.cli,cpu_id=1,conn_port=8086' \
+ -- -i --forward-mode=softnic --portmask=0x10
+ 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 "pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ a. send a packet larger than PBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+ b. send a packet not larger than PBS but larger than CBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+ c. send a packet not larger than CBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+**Notes**: the CBS/PBS includes IP header(20 bytes) and TCP header(20 bytes).
+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 "pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ a. send a packet larger than PBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+
+ The packet was dropped.
+
+ b. send a packet not larger than PBS but larger than CBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+
+ c. send a packet not larger than CBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 "pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst spec 2.20.21.22 proto spec 132 / sctp src mask 65535 dst mask 65535 src spec 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
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*469)], iface="enp131s0f3")
+
+ The packet was forwarded to port 1.
+
+ b. send a packet not larger than PBS but larger than CBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*468)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*369)], iface="enp131s0f3")
+
+ The packets was dropped.
+
+ c. send a packet not larger than CBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*368)], iface="enp131s0f3")
+
+ The packet was forwarded to port 1.
+
+**Notes**: the CBS/PBS includes IP header(20 bytes) and SCTP header(12 bytes).
+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 "pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst spec 2.20.21.22 proto spec 17 / udp 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/sport.
+
+ a. send a packet larger than PBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=17)/UDP(sport=2,dport=2)/Raw(load="P"*473)], iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+ b. send a packet not larger than PBS but larger than CBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=17)/UDP(sport=2,dport=2)/Raw(load="P"*373)], iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+ c. send a packet not larger than CBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=17)/UDP(sport=2,dport=2)/Raw(load="P"*372)], iface="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 "pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ a. send a packet larger than PBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+
+ The packet was dropped.
+
+ b. send a packet not larger than PBS but larger than CBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ The packet was dropped.
+
+ c. send a packet not larger than CBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 "pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ a. send a packet larger than PBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+ b. send a packet not larger than PBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="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 "pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ pipeline RX table match hash ext key 16 mask 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table,
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport. Send packets same as ACL table, there will be the same result with ACL table.
+
+Test Case 8: ipv6 ACL table RFC2698
+-----------------------------------
+1. Edit meter_and_policing_firmware.cli to change "table action" and "pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv6 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table,
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 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 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> flow create 2 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 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 => METER QUEUE
+ 1 0 0 i-- ETH IPV6 UDP => METER QUEUE
+
+3. Configure the packets with specified src/dst IPv6 address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=6)/TCP(sport=2,dport=2)/Raw(load="P"*441)], iface="enp131s0f3")
+ The packet was dropped.
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=6)/TCP(sport=2,dport=2)/Raw(load="P"*440)], iface="enp131s0f3")
+ The packet was forwarded to port 0.
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=6)/TCP(sport=2,dport=2)/Raw(load="P"*340)], iface="enp131s0f3")
+ The packet was forwarded to port 0.
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=17)/UDP(sport=2,dport=2)/Raw(load="P"*453)], iface="enp131s0f3")
+ The packet was forwarded to port 1.
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=17)/UDP(sport=2,dport=2)/Raw(load="P"*353)], iface="enp131s0f3")
+ The packet was forwarded to port 1.
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=17)/UDP(sport=2,dport=2)/Raw(load="P"*352)], iface="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 500 bytes.
+When the payload of IPv6-UDP packet is 452 bytes, the IPv6 packet is 500 bytes.
+
+Test Case 9: multiple meter and profile
+---------------------------------------
+1. Edit meter_and_policing_firmware.cli to change "table action" and "pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=4 --txq=4 --portmask=0x10
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 4 0 3125000000 3125000000 400 500
+ testpmd> add port meter profile trtcm_rfc2698 4 1 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 => METER QUEUE
+ 1 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 2 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 3 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 4 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 5 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 6 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 7 0 0 i-- ETH IPV4 TCP => METER QUEUE
+
+3. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ pkt1: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=0,dport=0)/Raw(load="P"*461)], iface="enp131s0f3")
+ pkt2: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=0,dport=0)/Raw(load="P"*460)], iface="enp131s0f3")
+ pkt3: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=0,dport=0)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt1/2/3 were forwarded to port 0
+ pkt4: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=1,dport=1)/Raw(load="P"*461)], iface="enp131s0f3")
+ pkt5: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=1,dport=1)/Raw(load="P"*460)], iface="enp131s0f3")
+ pkt6: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=1,dport=1)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt4 was dropped, pkt5/6 were forwarded to port1
+ pkt7: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ pkt8: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ pkt9: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt10: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt8/9 were dropped, pkt7/10 were forwarded to port2
+ pkt11: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=3,dport=3)/Raw(load="P"*461)], iface="enp131s0f3")
+ pkt12: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=3,dport=3)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt13: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=3,dport=3)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt13 was dropped, pkt11/12 were forwarded to port3
+ pkt14: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=4,dport=4)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt15: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=4,dport=4)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt16: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=4,dport=4)/Raw(load="P"*260)], iface="enp131s0f3")
+ pkt14 was dropped, pkt15/16 were forwarded to port0
+ pkt17: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=5,dport=5)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt18: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=5,dport=5)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt19: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=5,dport=5)/Raw(load="P"*261)], iface="enp131s0f3")
+ pkt20: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=5,dport=5)/Raw(load="P"*260)], iface="enp131s0f3")
+ pkt18/19 were dropped, pkt17/20 were forwarded to port1
+ pkt21: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=6,dport=6)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt22: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=6,dport=6)/Raw(load="P"*261)], iface="enp131s0f3")
+ pkt23: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=6,dport=6)/Raw(load="P"*260)], iface="enp131s0f3")
+ pkt23 was dropped, pkt21/22 were forwarded to port2
+ pkt24: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=7,dport=7)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt25: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=7,dport=7)/Raw(load="P"*261)], iface="enp131s0f3")
+ pkt26: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=7,dport=7)/Raw(load="P"*260)], iface="enp131s0f3")
+ pkt24/25/26 were dropped
+
+**Notes**: if create one flow with a mtr_id, then create the flow again 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 effect.
+
+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 every queue to red color. Edit meter_and_policing_firmware.cli to change "table action" and "pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 1 / queue index 0 / end
+
+5. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 0 / end
+
+7. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 3 / queue index 0 / end
+
+9. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 every queue to yellow color.
+
+ Edit meter_and_policing_firmware.cli to change "table action" and "pipeline table" as below,
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 1 / queue index 0 / end
+
+5. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 0 / end
+
+7. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 3 / queue index 0 / end
+
+9. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 every queue to green color.
+
+ Edit meter_and_policing_firmware.cli to change "table action" and "pipeline table" as below,
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_policing_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 1 / queue index 0 / end
+
+5. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 0 / end
+
+7. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 3 / queue index 0 / end
+
+9. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="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 (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 "pipeline table" as below,::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ pipeline RX table match acl ipv4 offset 270 size 4K action AP0
+ pipeline RX table 0 dscp /root/dpdk/drivers/net/softnic/dscp_default.sh
+ flowapi map group 0 ingress pipeline RX table 0
+
+2. Execute the steps2-9 of the case pre-colored green by DSCP table, got the same result.
\ No newline at end of file
--
2.17.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dts] [PATCH V1] add metering and policing test plan
2018-12-28 10:24 [dts] [PATCH V1] add metering and policing test plan Wenjie Li
@ 2018-12-28 10:34 ` Zhu, WenhuiX
2018-12-29 7:36 ` Tu, Lijuan
1 sibling, 0 replies; 3+ messages in thread
From: Zhu, WenhuiX @ 2018-12-28 10:34 UTC (permalink / raw)
To: Li, WenjieX A, dts; +Cc: Li, WenjieX A, Zhu, WenhuiX
Tested-by: Zhu, WenhuiX <wenhuix.zhu@intel.com>
-----Original Message-----
From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Wenjie Li
Sent: Friday, December 28, 2018 6:24 PM
To: dts@dpdk.org
Cc: Li, WenjieX A <wenjiex.a.li@intel.com>
Subject: [dts] [PATCH V1] add metering and policing test plan
add new test plan
Signed-off-by: Wenjie Li <wenjiex.a.li@intel.com>
---
.../metering_and_policing_test_plan.rst | 859 ++++++++++++++++++
1 file changed, 859 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/metering_and_policing_test_plan.rst
new file mode 100644
index 0000000..0590a5d
--- /dev/null
+++ b/test_plans/metering_and_policing_test_plan.rst
@@ -0,0 +1,859 @@
+.. 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.
+
+=====================
+metering and policing
+=====================
+
+Description
+-----------
+The SoftNIC allows building custom NIC pipelines in SW. The Soft NIC
+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
+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, 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
+packet is red, else . If the packet has been precolored as yellow or if
+Tc(t)-B < 0, the 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
+and made through different APIs. In table meter action implementation,
+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
+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 environment.
+
+2. start softnic with following command line,
+
+ ::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25 -n 4 \
+ --vdev 'net_softnic0,firmware=./drivers/net/softnic/firmware.cli,cpu_id=1,conn_port=8086' \
+ -- -i --forward-mode=softnic --portmask=0x10
+ testpmd> start
+
+3. start softnic with default hierarchy Qos with following command
+line,
+
+ ::
+
+ ./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25 -n 4 \
+ --vdev 'net_softnic0,firmware=./drivers/net/softnic/firmware.cli,cpu_id=1,conn_port=8086' \
+ -- -i --forward-mode=softnic --portmask=0x10
+ 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
+"pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ a. send a packet larger than PBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)],
+ iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+ b. send a packet not larger than PBS but larger than CBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)],
+ iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+ c. send a packet not larger than CBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+**Notes**: the CBS/PBS includes IP header(20 bytes) and TCP header(20 bytes).
+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
+"pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ a. send a packet larger than PBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)],
+ iface="enp131s0f3")
+
+ The packet was dropped.
+
+ b. send a packet not larger than PBS but larger than CBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)],
+ iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+
+ c. send a packet not larger than CBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+"pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst spec 2.20.21.22 proto spec 132 / sctp src mask 65535 dst mask 65535 src spec 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
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*469)],
+ iface="enp131s0f3")
+
+ The packet was forwarded to port 1.
+
+ b. send a packet not larger than PBS but larger than CBS
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*468)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*369)],
+ iface="enp131s0f3")
+
+ The packets was dropped.
+
+ c. send a packet not larger than CBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*368)],
+ iface="enp131s0f3")
+
+ The packet was forwarded to port 1.
+
+**Notes**: the CBS/PBS includes IP header(20 bytes) and SCTP header(12 bytes).
+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
+"pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst spec 2.20.21.22 proto spec 17 / udp 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/sport.
+
+ a. send a packet larger than PBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=17)/UDP(sport=2,dport=2)/Raw(load="P"*473)],
+ iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+ b. send a packet not larger than PBS but larger than CBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=17)/UDP(sport=2,dport=2)/Raw(load="P"*373)],
+ iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+ c. send a packet not larger than CBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=17)/UDP(sport=2,dport=2)/Raw(load="P"*372)],
+ iface="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
+"pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ a. send a packet larger than PBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)],
+ iface="enp131s0f3")
+
+ The packet was dropped.
+
+ b. send a packet not larger than PBS but larger than CBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)],
+ iface="enp131s0f3")
+
+ The packet was dropped.
+
+ c. send a packet not larger than CBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+"pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ a. send a packet larger than PBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)],
+ iface="enp131s0f3")
+
+ The packet was forwarded to port 0.
+
+ b. send a packet not larger than PBS
+ ::
+
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)],
+ iface="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
+"pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ pipeline RX table match hash ext key 16 mask 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table,
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport. Send packets same as ACL table, there will be the same result with ACL table.
+
+Test Case 8: ipv6 ACL table RFC2698
+-----------------------------------
+1. Edit meter_and_policing_firmware.cli to change "table action" and
+"pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv6 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table,
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 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 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> flow create 2 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 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 => METER QUEUE
+ 1 0 0 i-- ETH IPV6 UDP => METER QUEUE
+
+3. Configure the packets with specified src/dst IPv6 address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=6)/TCP(sport=2,dport=2)/Raw(load="P"*441)], iface="enp131s0f3")
+ The packet was dropped.
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=6)/TCP(sport=2,dport=2)/Raw(load="P"*440)], iface="enp131s0f3")
+ The packet was forwarded to port 0.
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=6)/TCP(sport=2,dport=2)/Raw(load="P"*340)], iface="enp131s0f3")
+ The packet was forwarded to port 0.
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=17)/UDP(sport=2,dport=2)/Raw(load="P"*453)], iface="enp131s0f3")
+ The packet was forwarded to port 1.
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=17)/UDP(sport=2,dport=2)/Raw(load="P"*353)], iface="enp131s0f3")
+ The packet was forwarded to port 1.
+ sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABCD:EF01:2345:5789",dst="2001::1",nh=17)/UDP(sport=2,dport=2)/Raw(load="P"*352)], iface="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 500 bytes.
+When the payload of IPv6-UDP packet is 452 bytes, the IPv6 packet is 500 bytes.
+
+Test Case 9: multiple meter and profile
+---------------------------------------
+1. Edit meter_and_policing_firmware.cli to change "table action" and
+"pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=4 --txq=4 --portmask=0x10
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 4 0 3125000000 3125000000 400 500
+ testpmd> add port meter profile trtcm_rfc2698 4 1 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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 => METER QUEUE
+ 1 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 2 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 3 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 4 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 5 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 6 0 0 i-- ETH IPV4 TCP => METER QUEUE
+ 7 0 0 i-- ETH IPV4 TCP => METER QUEUE
+
+3. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ pkt1: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=0,dport=0)/Raw(load="P"*461)], iface="enp131s0f3")
+ pkt2: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=0,dport=0)/Raw(load="P"*460)], iface="enp131s0f3")
+ pkt3: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=0,dport=0)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt1/2/3 were forwarded to port 0
+ pkt4: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=1,dport=1)/Raw(load="P"*461)], iface="enp131s0f3")
+ pkt5: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=1,dport=1)/Raw(load="P"*460)], iface="enp131s0f3")
+ pkt6: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=1,dport=1)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt4 was dropped, pkt5/6 were forwarded to port1
+ pkt7: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ pkt8: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+ pkt9: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt10: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt8/9 were dropped, pkt7/10 were forwarded to port2
+ pkt11: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=3,dport=3)/Raw(load="P"*461)], iface="enp131s0f3")
+ pkt12: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=3,dport=3)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt13: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=3,dport=3)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt13 was dropped, pkt11/12 were forwarded to port3
+ pkt14: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=4,dport=4)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt15: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=4,dport=4)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt16: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=4,dport=4)/Raw(load="P"*260)], iface="enp131s0f3")
+ pkt14 was dropped, pkt15/16 were forwarded to port0
+ pkt17: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=5,dport=5)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt18: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=5,dport=5)/Raw(load="P"*360)], iface="enp131s0f3")
+ pkt19: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=5,dport=5)/Raw(load="P"*261)], iface="enp131s0f3")
+ pkt20: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=5,dport=5)/Raw(load="P"*260)], iface="enp131s0f3")
+ pkt18/19 were dropped, pkt17/20 were forwarded to port1
+ pkt21: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=6,dport=6)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt22: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=6,dport=6)/Raw(load="P"*261)], iface="enp131s0f3")
+ pkt23: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=6,dport=6)/Raw(load="P"*260)], iface="enp131s0f3")
+ pkt23 was dropped, pkt21/22 were forwarded to port2
+ pkt24: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=7,dport=7)/Raw(load="P"*361)], iface="enp131s0f3")
+ pkt25: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=7,dport=7)/Raw(load="P"*261)], iface="enp131s0f3")
+ pkt26: sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=7,dport=7)/Raw(load="P"*260)], iface="enp131s0f3")
+ pkt24/25/26 were dropped
+
+**Notes**: if create one flow with a mtr_id, then create the flow again
+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 effect.
+
+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
+every queue to red color. Edit meter_and_policing_firmware.cli to
+change "table action" and "pipeline table" as below,
+
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+ mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
+ 1.10.11.12 dst 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 1 / queue
+ index 0 / end
+
+5. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+ mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
+ 1.10.11.12 dst 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 0 / end
+
+7. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+ mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
+ 1.10.11.12 dst 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 3 / queue
+ index 0 / end
+
+9. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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 every queue to yellow color.
+
+ Edit meter_and_policing_firmware.cli to change "table action" and
+ "pipeline table" as below,
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+ mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
+ 1.10.11.12 dst 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 1 / queue
+ index 0 / end
+
+5. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+ mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
+ 1.10.11.12 dst 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 0 / end
+
+7. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+ mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
+ 1.10.11.12 dst 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 3 / queue
+ index 0 / end
+
+9. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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 every queue to green color.
+
+ Edit meter_and_policing_firmware.cli to change "table action" and
+ "pipeline table" as below,
+ ::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ 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
+ 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
+ ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
+ --rxq=2 --txq=2 --portmask=0x4
+
+ Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
+ ::
+
+ testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000 3125000000 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 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12 dst 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/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+ mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
+ 1.10.11.12 dst 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 1 / queue
+ index 0 / end
+
+5. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+ mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
+ 1.10.11.12 dst 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 0 / end
+
+7. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+ mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
+ 1.10.11.12 dst 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 3 / queue
+ index 0 / end
+
+9. Configure the packets with specified src/dst IP address and TCP dport/sport.
+
+ ::
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
+
+ sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
+ .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
+ iface="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
+ (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 "pipeline table" as below,::
+
+ table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
+ pipeline RX table match acl ipv4 offset 270 size 4K action AP0
+ pipeline RX table 0 dscp /root/dpdk/drivers/net/softnic/dscp_default.sh
+ flowapi map group 0 ingress pipeline RX table 0
+
+2. Execute the steps2-9 of the case pre-colored green by DSCP table, got the same result.
\ No newline at end of file
--
2.17.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dts] [PATCH V1] add metering and policing test plan
2018-12-28 10:24 [dts] [PATCH V1] add metering and policing test plan Wenjie Li
2018-12-28 10:34 ` Zhu, WenhuiX
@ 2018-12-29 7:36 ` Tu, Lijuan
1 sibling, 0 replies; 3+ messages in thread
From: Tu, Lijuan @ 2018-12-29 7:36 UTC (permalink / raw)
To: Li, WenjieX A, dts; +Cc: Li, WenjieX A
Thanks for your revision. I saw the html much better than before.
But still a small mess have to mentioned:
Line 44 and line 52, should be lists like below:
* in the Color-Blind mode
* in the Color-Aware mode
Line 48 to 50 should be sub-list, not a none-format block.
<indent>* If Tp(t)-B < 0, the packet is red, else
<indent>* If Tc(t)-B < 0, the packet is yellow and Tp is decremented by B, else
<indent>* The packet is green and both Tp and Tc are decremented by B.
> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Wenjie Li
> Sent: Friday, December 28, 2018 6:24 PM
> To: dts@dpdk.org
> Cc: Li, WenjieX A <wenjiex.a.li@intel.com>
> Subject: [dts] [PATCH V1] add metering and policing test plan
>
> add new test plan
>
> Signed-off-by: Wenjie Li <wenjiex.a.li@intel.com>
> ---
> .../metering_and_policing_test_plan.rst | 859
> ++++++++++++++++++
> 1 file changed, 859 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/metering_and_policing_test_plan.rst
> new file mode 100644
> index 0000000..0590a5d
> --- /dev/null
> +++ b/test_plans/metering_and_policing_test_plan.rst
> @@ -0,0 +1,859 @@
> +.. 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.
> +
> +=====================
> +metering and policing
> +=====================
> +
> +Description
> +-----------
> +The SoftNIC allows building custom NIC pipelines in SW. The Soft NIC
> +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
> +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, 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
> +packet is red, else . If the packet has been precolored as yellow or if
> +Tc(t)-B < 0, the 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
> +and made through different APIs. In table meter action implementation,
> +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
> +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
> environment.
> +
> +2. start softnic with following command line,
> +
> + ::
> +
> + ./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25 -n 4 \
> + --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/firmware.cli,cpu_id=1,conn_po
> rt=8086' \
> + -- -i --forward-mode=softnic --portmask=0x10
> + testpmd> start
> +
> +3. start softnic with default hierarchy Qos with following command
> +line,
> +
> + ::
> +
> + ./x86_64-native-linuxapp-gcc/app/testpmd -l 21-25 -n 4 \
> + --vdev
> 'net_softnic0,firmware=./drivers/net/softnic/firmware.cli,cpu_id=1,conn_po
> rt=8086' \
> + -- -i --forward-mode=softnic --portmask=0x10
> + testpmd> set port tm hierarchy default 1
> + testpmd> start
> +
> +Test Case 1: ipv4 ACL table RFC2698 GYR
> +---------------------------------------
> +1. Edit meter_and_policing_firmware.cli to change "table action" and
> +"pipeline table" as below,
> +
> + ::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=2 --txq=2 --portmask=0x4
> +
> + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
> +
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000
> 3125000000 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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/sport.
> +
> + a. send a packet larger than PBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)],
> + iface="enp131s0f3")
> +
> + The packet was forwarded to port 0.
> +
> + b. send a packet not larger than PBS but larger than CBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)],
> + iface="enp131s0f3")
> +
> + The packet was forwarded to port 0.
> +
> + c. send a packet not larger than CBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="enp131s0f3")
> +
> + The packet was forwarded to port 0.
> +
> +**Notes**: the CBS/PBS includes IP header(20 bytes) and TCP header(20
> bytes).
> +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
> +"pipeline table" as below,
> +
> + ::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=2 --txq=2 --portmask=0x4
> +
> + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000
> 3125000000 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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/sport.
> +
> + a. send a packet larger than PBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)],
> + iface="enp131s0f3")
> +
> + The packet was dropped.
> +
> + b. send a packet not larger than PBS but larger than CBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)],
> + iface="enp131s0f3")
> +
> + The packet was forwarded to port 0.
> +
> +
> + c. send a packet not larger than CBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> +"pipeline table" as below,
> +
> + ::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=2 --txq=2 --portmask=0x4
> +
> + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000
> 3125000000 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst spec 2.20.21.22 proto spec 132 / sctp src mask 65535 dst mask 65535 src
> spec 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
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*469)],
> + iface="enp131s0f3")
> +
> + The packet was forwarded to port 1.
> +
> + b. send a packet not larger than PBS but larger than CBS
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*468)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*369)],
> + iface="enp131s0f3")
> +
> + The packets was dropped.
> +
> + c. send a packet not larger than CBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=132)/SCTP(sport=2,dport=2)/Raw(load="P"*368)],
> + iface="enp131s0f3")
> +
> + The packet was forwarded to port 1.
> +
> +**Notes**: the CBS/PBS includes IP header(20 bytes) and SCTP header(12
> bytes).
> +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
> +"pipeline table" as below,
> +
> + ::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=2 --txq=2 --portmask=0x4
> +
> + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000
> 3125000000 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst spec 2.20.21.22 proto spec 17 / udp 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/sport.
> +
> + a. send a packet larger than PBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=17)/UDP(sport=2,dport=2)/Raw(load="P"*473)],
> + iface="enp131s0f3")
> +
> + The packet was forwarded to port 0.
> +
> + b. send a packet not larger than PBS but larger than CBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=17)/UDP(sport=2,dport=2)/Raw(load="P"*373)],
> + iface="enp131s0f3")
> +
> + The packet was forwarded to port 0.
> +
> + c. send a packet not larger than CBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=17)/UDP(sport=2,dport=2)/Raw(load="P"*372)],
> + iface="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
> +"pipeline table" as below,
> +
> + ::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=2 --txq=2 --portmask=0x4
> +
> + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000
> 3125000000 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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/sport.
> +
> + a. send a packet larger than PBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)],
> + iface="enp131s0f3")
> +
> + The packet was dropped.
> +
> + b. send a packet not larger than PBS but larger than CBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)],
> + iface="enp131s0f3")
> +
> + The packet was dropped.
> +
> + c. send a packet not larger than CBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> +"pipeline table" as below,
> +
> + ::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=2 --txq=2 --portmask=0x4
> +
> + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000
> 3125000000 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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/sport.
> +
> + a. send a packet larger than PBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)],
> + iface="enp131s0f3")
> +
> + The packet was forwarded to port 0.
> +
> + b. send a packet not larger than PBS
> + ::
> +
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)],
> + iface="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
> +"pipeline table" as below,
> +
> + ::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + pipeline RX table match hash ext key 16 mask
> 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=2 --txq=2 --portmask=0x4
> +
> + Add rules to table,
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000
> 3125000000 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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/sport. Send packets same as ACL table, there will be the same result
> with ACL table.
> +
> +Test Case 8: ipv6 ACL table RFC2698
> +-----------------------------------
> +1. Edit meter_and_policing_firmware.cli to change "table action" and
> +"pipeline table" as below,
> +
> + ::
> +
> + table action profile AP0 ipv6 offset 270 fwd meter trtcm tc 1 stats pkts
> + 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=2 --txq=2 --portmask=0x4
> +
> + Add rules to table,
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000
> 3125000000 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
> 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 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> flow create 2 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 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 => METER QUEUE
> + 1 0 0 i-- ETH IPV6 UDP => METER QUEUE
> +
> +3. Configure the packets with specified src/dst IPv6 address and TCP
> dport/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABC
> D:EF01:2345:5789",dst="2001::1",nh=6)/TCP(sport=2,dport=2)/Raw(load="P
> "*441)], iface="enp131s0f3")
> + The packet was dropped.
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABC
> D:EF01:2345:5789",dst="2001::1",nh=6)/TCP(sport=2,dport=2)/Raw(load="P
> "*440)], iface="enp131s0f3")
> + The packet was forwarded to port 0.
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABC
> D:EF01:2345:5789",dst="2001::1",nh=6)/TCP(sport=2,dport=2)/Raw(load="P
> "*340)], iface="enp131s0f3")
> + The packet was forwarded to port 0.
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABC
> D:EF01:2345:5789",dst="2001::1",nh=17)/UDP(sport=2,dport=2)/Raw(load="
> P"*453)], iface="enp131s0f3")
> + The packet was forwarded to port 1.
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABC
> D:EF01:2345:5789",dst="2001::1",nh=17)/UDP(sport=2,dport=2)/Raw(load="
> P"*353)], iface="enp131s0f3")
> + The packet was forwarded to port 1.
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IPv6(src="ABCD:EF01:2345:6789:ABC
> D:EF01:2345:5789",dst="2001::1",nh=17)/UDP(sport=2,dport=2)/Raw(load="
> P"*352)], iface="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 500
> bytes.
> +When the payload of IPv6-UDP packet is 452 bytes, the IPv6 packet is 500
> bytes.
> +
> +Test Case 9: multiple meter and profile
> +---------------------------------------
> +1. Edit meter_and_policing_firmware.cli to change "table action" and
> +"pipeline table" as below,
> +
> + ::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=4 --txq=4 --portmask=0x10
> +
> + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 4 0 3125000000
> 3125000000 400 500
> + testpmd> add port meter profile trtcm_rfc2698 4 1 3125000000
> 3125000000 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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 => METER QUEUE
> + 1 0 0 i-- ETH IPV4 TCP => METER QUEUE
> + 2 0 0 i-- ETH IPV4 TCP => METER QUEUE
> + 3 0 0 i-- ETH IPV4 TCP => METER QUEUE
> + 4 0 0 i-- ETH IPV4 TCP => METER QUEUE
> + 5 0 0 i-- ETH IPV4 TCP => METER QUEUE
> + 6 0 0 i-- ETH IPV4 TCP => METER QUEUE
> + 7 0 0 i-- ETH IPV4 TCP => METER QUEUE
> +
> +3. Configure the packets with specified src/dst IP address and TCP
> dport/sport.
> +
> + ::
> +
> + pkt1:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=0,dport=0)/Raw(load="P"*461)], iface="enp131s0f3")
> + pkt2:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=0,dport=0)/Raw(load="P"*460)], iface="enp131s0f3")
> + pkt3:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=0,dport=0)/Raw(load="P"*360)], iface="enp131s0f3")
> + pkt1/2/3 were forwarded to port 0
> + pkt4:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=1,dport=1)/Raw(load="P"*461)], iface="enp131s0f3")
> + pkt5:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=1,dport=1)/Raw(load="P"*460)], iface="enp131s0f3")
> + pkt6:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=1,dport=1)/Raw(load="P"*360)], iface="enp131s0f3")
> + pkt4 was dropped, pkt5/6 were forwarded to port1
> + pkt7:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> + pkt8:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> + pkt9:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*361)], iface="enp131s0f3")
> + pkt10:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)], iface="enp131s0f3")
> + pkt8/9 were dropped, pkt7/10 were forwarded to port2
> + pkt11:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=3,dport=3)/Raw(load="P"*461)], iface="enp131s0f3")
> + pkt12:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=3,dport=3)/Raw(load="P"*361)], iface="enp131s0f3")
> + pkt13:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=3,dport=3)/Raw(load="P"*360)], iface="enp131s0f3")
> + pkt13 was dropped, pkt11/12 were forwarded to port3
> + pkt14:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=4,dport=4)/Raw(load="P"*361)], iface="enp131s0f3")
> + pkt15:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=4,dport=4)/Raw(load="P"*360)], iface="enp131s0f3")
> + pkt16:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=4,dport=4)/Raw(load="P"*260)], iface="enp131s0f3")
> + pkt14 was dropped, pkt15/16 were forwarded to port0
> + pkt17:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=5,dport=5)/Raw(load="P"*361)], iface="enp131s0f3")
> + pkt18:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=5,dport=5)/Raw(load="P"*360)], iface="enp131s0f3")
> + pkt19:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=5,dport=5)/Raw(load="P"*261)], iface="enp131s0f3")
> + pkt20:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=5,dport=5)/Raw(load="P"*260)], iface="enp131s0f3")
> + pkt18/19 were dropped, pkt17/20 were forwarded to port1
> + pkt21:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=6,dport=6)/Raw(load="P"*361)], iface="enp131s0f3")
> + pkt22:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=6,dport=6)/Raw(load="P"*261)], iface="enp131s0f3")
> + pkt23:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=6,dport=6)/Raw(load="P"*260)], iface="enp131s0f3")
> + pkt23 was dropped, pkt21/22 were forwarded to port2
> + pkt24:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=7,dport=7)/Raw(load="P"*361)], iface="enp131s0f3")
> + pkt25:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=7,dport=7)/Raw(load="P"*261)], iface="enp131s0f3")
> + pkt26:
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=7,dport=7)/Raw(load="P"*260)], iface="enp131s0f3")
> + pkt24/25/26 were dropped
> +
> +**Notes**: if create one flow with a mtr_id, then create the flow again
> +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 effect.
> +
> +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
> +every queue to red color. Edit meter_and_policing_firmware.cli to
> +change "table action" and "pipeline table" as below,
> +
> + ::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=2 --txq=2 --portmask=0x4
> +
> + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000
> 3125000000 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
> + 1.10.11.12 dst 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 1 / queue
> + index 0 / end
> +
> +5. Configure the packets with specified src/dst IP address and TCP
> dport/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
> + 1.10.11.12 dst 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 0 / end
> +
> +7. Configure the packets with specified src/dst IP address and TCP
> dport/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
> + 1.10.11.12 dst 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 3 / queue
> + index 0 / end
> +
> +9. Configure the packets with specified src/dst IP address and TCP
> dport/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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 every
> queue to yellow color.
> +
> + Edit meter_and_policing_firmware.cli to change "table action" and
> + "pipeline table" as below,
> + ::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=2 --txq=2 --portmask=0x4
> +
> + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000
> 3125000000 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
> + 1.10.11.12 dst 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 1 / queue
> + index 0 / end
> +
> +5. Configure the packets with specified src/dst IP address and TCP
> dport/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
> + 1.10.11.12 dst 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 0 / end
> +
> +7. Configure the packets with specified src/dst IP address and TCP
> dport/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
> + 1.10.11.12 dst 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 3 / queue
> + index 0 / end
> +
> +9. Configure the packets with specified src/dst IP address and TCP
> dport/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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 every
> queue to green color.
> +
> + Edit meter_and_policing_firmware.cli to change "table action" and
> + "pipeline table" as below,
> + ::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + 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
> + 'net_softnic0,firmware=/root/dpdk/drivers/net/softnic/meter_and_polici
> + ng_firmware.cli,cpu_id=0,conn_port=8086' -- -i --forward-mode=softnic
> + --rxq=2 --txq=2 --portmask=0x4
> +
> + Add rules to table, set CBS to 400 bytes, PBS to 500 bytes
> + ::
> +
> + testpmd> add port meter profile trtcm_rfc2698 2 0 3125000000
> 3125000000 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
> 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec 1.10.11.12
> dst 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/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
> + 1.10.11.12 dst 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 1 / queue
> + index 0 / end
> +
> +5. Configure the packets with specified src/dst IP address and TCP
> dport/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
> + 1.10.11.12 dst 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 0 / end
> +
> +7. Configure the packets with specified src/dst IP address and TCP
> dport/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> + mask 255 src mask 255.255.255.255 dst mask 255.255.255.255 src spec
> + 1.10.11.12 dst 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 3 / queue
> + index 0 / end
> +
> +9. Configure the packets with specified src/dst IP address and TCP
> dport/sport.
> +
> + ::
> +
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*461)], iface="enp131s0f3")
> +
> sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21.22',p
> roto=6)/TCP(sport=2,dport=2)/Raw(load="P"*460)], iface="enp131s0f3")
> +
> + sendp([Ether(dst="00:00:00:00:01:00")/IP(src='1.10.11.12',dst='2.20.21
> + .22',proto=6)/TCP(sport=2,dport=2)/Raw(load="P"*360)],
> + iface="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
> + (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
> "pipeline table" as below,::
> +
> + table action profile AP0 ipv4 offset 270 fwd meter trtcm tc 1 stats pkts
> + pipeline RX table match acl ipv4 offset 270 size 4K action AP0
> + pipeline RX table 0 dscp
> /root/dpdk/drivers/net/softnic/dscp_default.sh
> + flowapi map group 0 ingress pipeline RX table 0
> +
> +2. Execute the steps2-9 of the case pre-colored green by DSCP table, got
> the same result.
> \ No newline at end of file
> --
> 2.17.2
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-12-29 7:36 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-28 10:24 [dts] [PATCH V1] add metering and policing test plan Wenjie Li
2018-12-28 10:34 ` Zhu, WenhuiX
2018-12-29 7:36 ` Tu, Lijuan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).