[V2,1/2] test_plans/vf_offload: add test cases for tunneling packets

Message ID 20221125091226.383666-2-ke1.xu@intel.com (mailing list archive)
State Superseded
Headers
Series update existing cases and add new cases to validate vf tunneling packets |

Commit Message

Ke Xu Nov. 25, 2022, 9:12 a.m. UTC
  DPDK will support outer checksum offload and tunneling TSO in release
 22.11, this commit is intended to cover the new scenario of test these
 features.

Added new case HW tunneling checksum offload check, covering tunnel
 packets for HW checksum offload.

Added new packets to TSO prerequisites and added new case csum fwd
 engine, use tunnel TSO, covering tunnel packets for HW TSO.

Signed-off-by: Ke Xu <ke1.xu@intel.com>
---
 test_plans/vf_offload_test_plan.rst | 225 ++++++++++++++++++++++++++++
 1 file changed, 225 insertions(+)
  

Patch

diff --git a/test_plans/vf_offload_test_plan.rst b/test_plans/vf_offload_test_plan.rst
index c5e720f2..8a5e36af 100644
--- a/test_plans/vf_offload_test_plan.rst
+++ b/test_plans/vf_offload_test_plan.rst
@@ -113,6 +113,96 @@  be validated as pass by the tester.
 The IPv4 source address will not be changed by testpmd.
 
 
+Test Case: HW tunneling checksum offload check
+==============================================
+Start testpmd and enable checksum offload on rx port.
+
+Setup the ``csum`` forwarding mode::
+
+  testpmd> set fwd csum
+  Set csum packet forwarding mode
+
+Enable the IPv4/UDP/TCP/SCTP HW checksum offload on port 0::
+
+  testpmd> port stop all
+  testpmd> csum set ip hw 0
+  testpmd> csum set tcp hw 0
+  testpmd> csum set udp hw 0
+  testpmd> csum set sctp hw 0
+  testpmd> csum set outer-ip hw 0
+  testpmd> csum set outer-udp hw 0
+  testpmd> csum parse-tunnel on 0
+  testpmd> port start all
+  testpmd> set promisc 0 on
+  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 with inner package of:
+
+  +----------------+----------------------------------------+
+  | packet type    | packet organization                    |
+  +================+========================================+
+  |                | IPv4 / UDP / payload                   |
+  |                +----------------------------------------+
+  |                | IPv4 / TCP / payload                   |
+  |                +----------------------------------------+
+  | inner packets  | IPv4 / SCTP / payload                  |
+  | for checksum   +----------------------------------------+
+  | offload test   | IPv6 / UDP / payload                   |
+  |                +----------------------------------------+
+  |                | IPv6 / TCP / payload                   |
+  |                +----------------------------------------+
+  |                | IPv6 / SCTP / payload                  |
+  +----------------+----------------------------------------+
+
+And outer or tunneling package of :
+
+  +----------------+----------------------------------------+
+  | packet type    | packet organization                    |
+  +================+========================================+
+  |                | Ether / IPv4 / UDP / VXLAN / Ether     |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / UDP / VXLAN / Ether     |
+  |                +----------------------------------------+
+  |                | Ether / IPv4 / GRE                     |
+  | outer and      +----------------------------------------+
+  | tunneling      | Ether / IPv4 / GRE / Ether             |
+  | packets        +----------------------------------------+
+  | for checksum   | Ether / IPv6 / GRE                     |
+  | offload test   +----------------------------------------+
+  |                | Ether / IPv6 / GRE / Ether             |
+  |                +----------------------------------------+
+  |                | Ether / IPv4 / NVGRE                   |
+  |                +----------------------------------------+
+  |                | Ether / IPv4 / NVGRE / Ether           |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / NVGRE                   |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / NVGRE / Ether           |
+  |                +----------------------------------------+
+  |                | Ether / IPv4 / UDP / GTPU              |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / UDP / GTPU              |
+  +----------------+----------------------------------------+
+  
+Notice that VxLAN needs DCF to configure, so testing of VxLAN may need to perform
+on DCF.
+
+Send packets with incorrect checksum on outer IPv4, outer UDP (if exists), inner
+IP, inner L4, verify dpdk can rx it and report the checksum error,
+verify that the same number of packet are correctly received on the traffic
+generator side. And IPv4 checksum, TCP checksum, UDP checksum, SCTP checksum need
+be validated as pass by the tester.
+
+The IPv4 source address will not be changed by testpmd.
+
+
 Test Case: SW checksum offload check
 ====================================
 
@@ -183,6 +273,91 @@  and checksum on rx port. The test commands is below::
   # Enable TSO on tx port
   testpmd> tso set 800 1
 
+For tunneling cases, add tunneling support on csum and enable tunnel tso as
+below::
+
+  # Enable hw checksum for tunneling on rx port
+  testpmd> port stop all
+  testpmd> csum set outer-ip hw 0
+  testpmd> csum set outer-udp hw 0
+  testpmd> csum parse-tunnel on 0
+  testpmd> port start all
+  testpmd> tunnel_tso set 800 1
+
+Configure the traffic generator to send the multiple packets for the following
+combination:
+
+  +----------------+----------------------------------------+
+  | packet type    | packet organization                    |
+  +================+========================================+
+  |                | Ether / IPv4 / TCP / payload len 128   |
+  |                +----------------------------------------+
+  |                | Ether / IPv4 / TCP / payload len 800   |
+  |                +----------------------------------------+
+  |                | Ether / IPv4 / TCP / payload len 801   |
+  |                +----------------------------------------+
+  |                | Ether / IPv4 / TCP / payload len 1700  |
+  | non-tunneling  +----------------------------------------+
+  | packets for    | Ether / IPv4 / TCP / payload len 2500  |
+  | TSO test       +----------------------------------------+
+  |                | Ether / IPv6 / TCP / payload len 128   |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / TCP / payload len 800   |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / TCP / payload len 801   |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / TCP / payload len 1700  |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / TCP / payload len 2500  |
+  +----------------+----------------------------------------+
+  |                | Ether / IPv4 / UDP / VXLAN / Ether     |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / UDP / VXLAN / Ether     |
+  |                +----------------------------------------+
+  |                | Ether / IPv4 / GRE                     |
+  | outer and      +----------------------------------------+
+  | tunneling      | Ether / IPv4 / GRE / Ether             |
+  | packets        +----------------------------------------+
+  | for tso test   | Ether / IPv6 / GRE                     |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / GRE / Ether             |
+  |                +----------------------------------------+
+  |                | Ether / IPv4 / NVGRE                   |
+  |                +----------------------------------------+
+  |                | Ether / IPv4 / NVGRE / Ether           |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / NVGRE                   |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / NVGRE / Ether           |
+  |                +----------------------------------------+
+  |                | Ether / IPv4 / UDP / GTPU              |
+  |                +----------------------------------------+
+  |                | Ether / IPv6 / UDP / GTPU              |
+  +----------------+----------------------------------------+
+  |                | IPv4 / TCP / payload len 128           |
+  |                +----------------------------------------+
+  |                | IPv4 / TCP / payload len 800           |
+  |                +----------------------------------------+
+  |                | IPv4 / TCP / payload len 801           |
+  |                +----------------------------------------+
+  |                | IPv4 / TCP / payload len 1700          |
+  |                +----------------------------------------+
+  | inner packets  | IPv4 / TCP / payload len 2500          |
+  | for TSO test   +----------------------------------------+
+  |                | IPv6 / TCP / payload len 128           |
+  |                +----------------------------------------+
+  |                | IPv6 / TCP / payload len 800           |
+  |                +----------------------------------------+
+  |                | IPv6 / TCP / payload len 801           |
+  |                +----------------------------------------+
+  |                | IPv6 / TCP / payload len 1700          |
+  |                +----------------------------------------+
+  |                | IPv6 / TCP / payload len 2500          |
+  +----------------+----------------------------------------+
+  
+Notice that VxLAN needs DCF to configure, so testing of VxLAN may need to perform
+on DCF.
+
 
 Test case: csum fwd engine, use TSO
 ===================================
@@ -226,3 +401,53 @@  Test IPv4() in scapy::
 Test IPv6() in scapy::
 
     sendp([Ether(dst="%s", src="52:00:00:00:00:00")/IPv6(src="FE80:0:0:0:200:1FF:FE00:200", dst="3555:5555:6666:6666:7777:7777:8888:8888")/UDP(sport=1021,dport=1021)/Raw(load="\x50"*%s)], iface="%s")
+
+
+Test case: csum fwd engine, use tunnel TSO
+==========================================
+
+This test uses ``Scapy`` to send out one large tunneled TCP package. The dut
+forwards package with tunnel TSO enable on tx port while rx port turns checksum
+on. After package send out by TSO on tx port, the tester receives multiple small
+TCP package.
+
+Turn off tx port by ethtool on tester::
+
+  ethtool -K <tx port> rx off tx off tso off gso off gro off lro off
+  ip l set <tx port> up
+
+Capture package rx port on tester::
+
+  tcpdump -n -e -i <rx port> -s 0 -w /tmp/cap
+
+Launch the userland ``testpmd`` application on DUT as follows::
+
+  testpmd> set verbose 1
+  # Enable hw checksum on rx port
+  testpmd> port stop all
+  testpmd> csum set ip hw 0
+  testpmd> csum set tcp hw 0
+  testpmd> csum set udp hw 0
+  testpmd> csum set sctp hw 0
+  testpmd> csum set outer-ip hw 0
+  testpmd> csum set outer-udp hw 0
+  testpmd> csum parse-tunnel on 0
+  testpmd> set promisc 0 on
+  testpmd> port start all
+
+  # Enable TSO on tx port
+  testpmd> tunnel_tso set 800 1
+  # Set fwd engine and start
+
+  testpmd> set fwd csum
+  testpmd> start
+
+Test IPv4() in scapy::
+
+  for one_outer_packet in outer_packet_list:
+    sendp([Ether(dst="%s", src="52:00:00:00:00:00")/one_outer_packet/IP(src="192.168.1.1",dst="192.168.1.2")/UDP(sport=1021,dport=1021)/Raw(load="\x50"*%s)], iface="%s")
+
+Test IPv6() in scapy::
+
+  for one_outer_packet in outer_packet_list:
+    sendp([Ether(dst="%s", src="52:00:00:00:00:00")/one_outer_packet/IPv6(src="FE80:0:0:0:200:1FF:FE00:200", dst="3555:5555:6666:6666:7777:7777:8888:8888")/UDP(sport=1021,dport=1021)/Raw(load="\x50"*%s)], iface="%s")