From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 7AAEFA6A for ; Fri, 25 Sep 2015 07:10:44 +0200 (CEST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga102.fm.intel.com with ESMTP; 24 Sep 2015 22:10:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,584,1437462000"; d="scan'208";a="776709797" Received: from unknown (HELO dpdk-fedora20.icx.intel.com) ([10.238.55.12]) by orsmga001.jf.intel.com with ESMTP; 24 Sep 2015 22:10:42 -0700 From: yongjie To: dts@dpdk.org Date: Fri, 25 Sep 2015 13:06:25 +0800 Message-Id: <1443157585-105425-1-git-send-email-yongjiex.gu@intel.com> X-Mailer: git-send-email 1.9.3 Cc: GuYongjie Subject: [dts] [PATCH] modify checksum_offload and add coremask X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Sep 2015 05:10:45 -0000 From: GuYongjie Modify testcase_checksum_offload_with_vlan and testplan of testsuite_checksum_offload. Add testsuite_coremask and testplan of coremask. Signed-off-by: GuYongjie --- test_plans/checksum_offload_test_plan.rst | 400 +++++++++++++++-------------- tests/TestSuite_checksum_offload.py | 22 +- 2 files changed, 217 insertions(+), 205 deletions(-) diff --git a/test_plans/checksum_offload_test_plan.rst b/test_plans/checksum_offload_test_plan.rst index 8325b47..e789f28 100644 --- a/test_plans/checksum_offload_test_plan.rst +++ b/test_plans/checksum_offload_test_plan.rst @@ -1,195 +1,205 @@ -.. Copyright (c) <2010>, 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. - -========================== -PMD RX/TX Checksum Offload -========================== - -The support of RX/TX L3/L4 Checksum offload features by Poll Mode Drivers consists in: - -On the RX side: -- Verify IPv4 checksum by hardware for received packets. -- Verify UDP/TCP/SCTP checksum by hardware for received packets. - -On the TX side: - -- IPv4 checksum insertion by hardware in transmitted packets. -- IPv4/UDP checksum insertion by hardware in transmitted packets. -- IPv4/TCP checksum insertion by hardware in transmitted packets. -- IPv4/SCTP checksum insertion by hardware in transmitted packets (sctp - length in 4 bytes). -- IPv6/UDP checksum insertion by hardware in transmitted packets. -- IPv6/TCP checksum insertion by hardware in transmitted packets. -- IPv6/SCTP checksum insertion by hardware in transmitted packets (sctp - length in 4 bytes). - -RX side, the L3/L4 checksum offload by hardware can be enabled with the -following command of the ``testpmd`` application:: - - enable-rx-checksum - -TX side, the insertion of a L3/L4 checksum by hardware can be enabled with the -following command of the ``testpmd`` application and running in a dedicated -tx checksum mode:: - - set fwd csum - tx_checksum set mask port_id - -The transmission of packet is done with the ``start`` command of the ``testpmd`` -application that will receive packets and then transmit the packet out on all -configured ports. ``mask`` is used to indicated what hardware checksum -offload is required on the ``port_id``. Please check the NIC datasheet for the -corrresponding Hardware limits:: - - bit 0 - insert ip checksum offload if set - bit 1 - insert udp checksum offload if set - bit 2 - insert tcp checksum offload if set - bit 3 - insert sctp checksum offload if set - - -Prerequisites -============= - -Support igb_uio and vfio driver, if used vfio, kernel need 3.6+ and enable vt-d in bios. -When used vfio , used "modprobe vfio" and "modprobe vfio-pci" insmod vfiod driver, then used -"./tools/dpdk_nic_bind.py --bind=vfio-pci device_bus_id" to bind vfio driver to test driver. - -Assuming that ports ``0`` and ``2`` are connected to a traffic generator, -launch the ``testpmd`` with the following arguments:: - - ./build/app/testpmd -cffffff -n 1 -- -i --burst=1 --txpt=32 \ - --txht=8 --txwt=0 --txfreet=0 --rxfreet=64 --mbcache=250 --portmask=0x5 - enable-rx-checksum - -Set the verbose level to 1 to display informations for each received packet:: - - testpmd> set verbose 1 - -Test Case: Validate checksum on the receive packet -================================================== - -Setup the ``csum`` forwarding mode:: - - testpmd> set fwd csum - Set csum packet forwarding mode - -Start the packet forwarding:: - - testpmd> start - csum packet forwarding - CRC stripping disabled - packets/burst=32 - nb forwarding cores=1 - nb forwarding ports=10 - RX queues=1 - RX desc=128 - RX free threshold=64 - RX threshold registers: pthresh=8 hthresh=8 wthresh=4 - TX queues=1 - TX desc=512 - TX free threshold=0 - TX threshold registers: pthresh=32 hthresh=8 wthresh=8 - -Configure the traffic generator to send the multiple packets with the following -combination: good/bad ip checksum + good/bad udp/tcp checksum. - -Except that SCTP header + payload length must be a multiple of 4 bytes. -IPv4 + UDP/TCP packet length can range from the minimum length to 1518 bytes. - -Then verify that how many packets found with Bad-ipcsum or Bad-l4csum:: - - testpmd> stop - ---------------------- Forward statistics for port 0 ---------------------- - RX-packets: 0 RX-dropped: 0 RX-total: 0 - Bad-ipcsum: 0 Bad-l4csum: 0 - TX-packets: 0 TX-dropped: 0 TX-total: 0 - ---------------------------------------------------------------------------- - - -Test Case: Insert IPv4/IPv6 UDP/TCP/SCTP checksum on the transmit packet -======================================================================== - -Setup the ``csum`` forwarding mode:: - - testpmd> set fwd csum - Set csum packet forwarding mode - -Enable the IPv4/UDP/TCP/SCTP checksum offload on port 0:: - - testpmd> tx_checksum set 0xf 0 - testpmd> start - csum packet forwarding - CRC stripping disabled - packets/burst=32 - nb forwarding cores=1 - nb forwarding ports=10 - RX queues=1 - RX desc=128 - RX free threshold=64 - RX threshold registers: pthresh=8 hthresh=8 wthresh=4 - TX queues=1 - TX desc=512 - TX free threshold=0 - TX threshold registers: pthresh=32 hthresh=8 wthresh=8 - -Configure the traffic generator to send the multiple packets for the following -combination: IPv4/UDP, IPv4/TCP, IPv4/SCTP, IPv6/UDP, IPv6/TCP. - -Except that SCTP header + payload length must be a multiple of 4 bytes. -IPv4 + UDP/TCP packet length can range from the minimum length to 1518 bytes. - -Then verify that the same number of packet are correctly received on the traffic -generator side. And IPv4 checksum, TCP checksum, UDP checksum, SCTP CRC32c need -be validated as pass by the IXIA. - -The IPv4 source address will not be changed by testpmd. - - -Test Case: Do not insert IPv4/IPv6 UDP/TCP checksum on the transmit packet -========================================================================== - -Setup the ``csum`` forwarding mode:: - - testpmd> set fwd csum - Set csum packet forwarding mode - -Disable the IPv4/UDP/TCP/SCTP checksum offload on port 0:: - - testpmd> tx_checksum set 0x0 0 - testpmd> start - csum packet forwarding - CRC stripping disabled - packets/burst=32 - nb forwarding cores=1 - nb forwarding ports=10 - RX queues=1 - RX desc=128 - RX free threshold=64 - RX threshold registers: pthresh=8 hthresh=8 wthresh=4 - TX queues=1 - TX desc=512 - TX free threshold=0 - TX threshold registers: pthresh=32 hthresh=8 wthresh=8 - -Configure the traffic generator to send the multiple packets for the follwing -combination: IPv4/UDP, IPv4/TCP, IPv6/UDP, IPv6/TCP. - -IPv4 + UDP/TCP packet length can range from the minimum length to 1518 bytes. - -Then verify that the same number of packet are correctly received on the traffic -generator side. And IPv4 checksum, TCP checksum, UDP checksum need -be validated as pass by the IXIA. - -The first byte of source IPv4 address will be increment by testpmd. The checksum -is indeed recalculated by software algorithms. - - - +.. Copyright (c) <2010>, 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. + +========================== +PMD RX/TX Checksum Offload +========================== + +The support of RX/TX L3/L4 Checksum offload features by Poll Mode Drivers consists in: + +On the RX side: +- Verify IPv4 checksum by hardware for received packets. +- Verify UDP/TCP/SCTP checksum by hardware for received packets. + +On the TX side: + +- IPv4 checksum insertion by hardware in transmitted packets. +- IPv4/UDP checksum insertion by hardware in transmitted packets. +- IPv4/TCP checksum insertion by hardware in transmitted packets. +- IPv4/SCTP checksum insertion by hardware in transmitted packets (sctp + length in 4 bytes). +- IPv6/UDP checksum insertion by hardware in transmitted packets. +- IPv6/TCP checksum insertion by hardware in transmitted packets. +- IPv6/SCTP checksum insertion by hardware in transmitted packets (sctp + length in 4 bytes). + +RX side, the L3/L4 checksum offload by hardware can be enabled with the +following command of the ``testpmd`` application:: + + enable-rx-checksum + +TX side, the insertion of a L3/L4 checksum by hardware can be enabled with the +following command of the ``testpmd`` application and running in a dedicated +tx checksum mode:: + + set fwd csum + ??tx_checksum set mask port_id + +The transmission of packet is done with the ``start`` command of the ``testpmd`` +application that will receive packets and then transmit the packet out on all +configured ports. ``mask`` is used to indicated what hardware checksum +offload is required on the ``port_id``. Please check the NIC datasheet for the +corrresponding Hardware limits:: + + bit 0 - insert ip checksum offload if set + bit 1 - insert udp checksum offload if set + bit 2 - insert tcp checksum offload if set + bit 3 - insert sctp checksum offload if set + + +Prerequisites +============= + +Support igb_uio and vfio driver, if used vfio, kernel need 3.6+ and enable vt-d in bios. +When used vfio , used "modprobe vfio" and "modprobe vfio-pci" insmod vfiod driver, then used +"./tools/dpdk_nic_bind.py --bind=vfio-pci device_bus_id" to bind vfio driver to test driver. + +Assuming that ports ``0`` and ``2`` are connected to a traffic generator, +launch the ``testpmd`` with the following arguments:: + + ./build/app/testpmd -c 0x6 -n 4 -- -i --portmask=0x3 \ + --disable-hw-vlan --enable-rx-cksum --crc-strip --txqflags=0 + +Set the verbose level to 1 to display informations for each received packet:: + + testpmd> set verbose 1 + +Test Case: Checksum offload with vlan +================================================== + +Setup the ``csum`` forwarding mode:: + + testpmd> set fwd csum + Set csum packet forwarding mode + +Enable hw:: + + testpmd> csum set ip hw 0 + testpmd> csum set udp hw 0 + testpmd> csum set tcp hw 0 + testpmd> csum set sctp hw 0 + testpmd> csum set ip hw 1 + testpmd> csum set udp hw 1 + testpmd> csum set tcp hw 1 + testpmd> csum set sctp hw 1 + +Start the packet forwarding:: + + testpmd> start + csum packet forwarding - CRC stripping disabled - packets/burst=32 + nb forwarding cores=1 - nb forwarding ports=10 + RX queues=1 - RX desc=128 - RX free threshold=64 + RX threshold registers: pthresh=8 hthresh=8 wthresh=4 + TX queues=1 - TX desc=512 - TX free threshold=0 + TX threshold registers: pthresh=32 hthresh=8 wthresh=8 + +Configure the traffic generator to send the multiple packets with vlan and +with the following combination: IPv4/UDP, IPv4/TCP, IPv4/SCTP, IPv6/UDP, IPv6/TCP. + +Except that SCTP header + payload length must be a multiple of 4 bytes. +IPv4 + UDP/TCP packet length can range from the minimum length to 1518 bytes. + +Then verify that the same number of packet are correctly received on the traffic +generator side. And IPv4 checksum, TCP checksum, UDP checksum need +be validated as pass by scapy. + + +Test Case: Checksum offload enable hw +======================================================================== + +Setup the ``csum`` forwarding mode:: + + testpmd> set fwd csum + Set csum packet forwarding mode + +Enable hw:: + + testpmd> csum set ip hw 0 + testpmd> csum set udp hw 0 + testpmd> csum set tcp hw 0 + testpmd> csum set sctp hw 0 + testpmd> csum set ip hw 1 + testpmd> csum set udp hw 1 + testpmd> csum set tcp hw 1 + testpmd> csum set sctp hw 1 + +Start the packet forwarding:: + + testpmd> start + csum packet forwarding - CRC stripping disabled - packets/burst=32 + nb forwarding cores=1 - nb forwarding ports=10 + RX queues=1 - RX desc=128 - RX free threshold=64 + RX threshold registers: pthresh=8 hthresh=8 wthresh=4 + TX queues=1 - TX desc=512 - TX free threshold=0 + TX threshold registers: pthresh=32 hthresh=8 wthresh=8 + +Configure the traffic generator to send the multiple packets for the following +combination: IPv4/UDP, IPv4/TCP, IPv4/SCTP, IPv6/UDP, IPv6/TCP. + +Except that SCTP header + payload length must be a multiple of 4 bytes. +IPv4 + UDP/TCP packet length can range from the minimum length to 1518 bytes. + +Then verify that the same number of packet are correctly received on the traffic +generator side. And IPv4 checksum, TCP checksum, UDP checksum, SCTP CRC32c need +be validated as pass by scapy. + + +Test Case: Checksum offload disable hw +========================================================================== + +Setup the ``csum`` forwarding mode:: + + testpmd> set fwd csum + Set csum packet forwarding mode + +Start the packet forwarding:: + + testpmd> start + csum packet forwarding - CRC stripping disabled - packets/burst=32 + nb forwarding cores=1 - nb forwarding ports=10 + RX queues=1 - RX desc=128 - RX free threshold=64 + RX threshold registers: pthresh=8 hthresh=8 wthresh=4 + TX queues=1 - TX desc=512 - TX free threshold=0 + TX threshold registers: pthresh=32 hthresh=8 wthresh=8 + +Configure the traffic generator to send the multiple packets for the follwing +combination: IPv4/UDP, IPv4/TCP, IPv6/UDP, IPv6/TCP. + +IPv4 + UDP/TCP packet length can range from the minimum length to 1518 bytes. + +Then verify that the same number of packet are correctly received on the traffic +generator side. And IPv4 checksum, TCP checksum, UDP checksum need +be validated as pass by scapy. + + + + diff --git a/tests/TestSuite_checksum_offload.py b/tests/TestSuite_checksum_offload.py index abfebb6..0b9254e 100644 --- a/tests/TestSuite_checksum_offload.py +++ b/tests/TestSuite_checksum_offload.py @@ -40,6 +40,7 @@ import dts import string import re import rst +import random from test_case import TestCase from pmd_output import PmdOutput @@ -58,6 +59,7 @@ class TestChecksumOffload(TestCase): self.pmdout = PmdOutput(self.dut) self.portMask = dts.create_mask([self.dut_ports[0], self.dut_ports[1]]) self.ports_socket = self.dut.get_numa_id(self.dut_ports[0]) + self.vlan = random.randint(1,100) def set_up(self): """ @@ -162,16 +164,16 @@ class TestChecksumOffload(TestCase): traffic generator side. """ dmac = self.dut.get_mac_address(self.dut_ports[1]) - pktsChkErr = {'IP/UDP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IP(chksum=0x0)/UDP(chksum=0xf)/("X"*46)' % dmac, - 'IP/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IP(chksum=0x0)/TCP(chksum=0xf)/("X"*46)' % dmac, - 'IP/SCTP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IP(chksum=0x0)/SCTP(chksum=0xf)/("X"*48)' % dmac, - 'IPv6/UDP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IPv6(src="::1")/UDP(chksum=0xf)/("X"*46)' % dmac, - 'IPv6/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IPv6(src="::1")/TCP(chksum=0xf)/("X"*46)' % dmac} - pkts = {'IP/UDP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IP(src="127.0.0.2")/UDP()/("X"*46)' % dmac, - 'IP/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IP(src="127.0.0.2")/TCP()/("X"*46)' % dmac, - 'IP/SCTP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IP(src="127.0.0.2")/SCTP()/("X"*48)' % dmac, - 'IPv6/UDP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IPv6(src="::2")/UDP()/("X"*46)' % dmac, - 'IPv6/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IPv6(src="::2")/TCP()/("X"*46)' % dmac} + pktsChkErr = {'IP/UDP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=%s)/IP(chksum=0x0)/UDP(chksum=0xf)/("X"*46)' % (dmac, self.vlan), + 'IP/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=%s)/IP(chksum=0x0)/TCP(chksum=0xf)/("X"*46)' % (dmac, self.vlan), + 'IP/SCTP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=%s)/IP(chksum=0x0)/SCTP(chksum=0xf)/("X"*48)' % (dmac, self.vlan), + 'IPv6/UDP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=%s)/IPv6(src="::1")/UDP(chksum=0xf)/("X"*46)' % (dmac, self.vlan), + 'IPv6/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=%s)/IPv6(src="::1")/TCP(chksum=0xf)/("X"*46)' % (dmac, self.vlan)} + pkts = {'IP/UDP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=%s)/IP(src="127.0.0.2")/UDP()/("X"*46)' % (dmac, self.vlan), + 'IP/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=%s)/IP(src="127.0.0.2")/TCP()/("X"*46)' % (dmac, self.vlan), + 'IP/SCTP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=%s)/IP(src="127.0.0.2")/SCTP()/("X"*48)' % (dmac, self.vlan), + 'IPv6/UDP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=%s)/IPv6(src="::2")/UDP()/("X"*46)' % (dmac, self.vlan), + 'IPv6/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=%s)/IPv6(src="::2")/TCP()/("X"*46)' % (dmac, self.vlan)} self.checksum_enablehw(self.dut_ports[0]) self.checksum_enablehw(self.dut_ports[1]) self.dut.send_expect("start", "testpmd>") -- 1.7.4.4