83. IP Reassembly Tests

This document provides a test plan for benchmarking of the IP Reassembly sample application. This is a simple example app featuring packet processing using Intel® Data Plane Development Kit (Intel® DPDK) that show-cases the use of IP fragmented packets reassembly.

83.1. Prerequisites

If using vfio the kernel must be >= 3.6+ and VT-d must be enabled in bios.When using vfio, use the following commands to load the vfio driver and bind it to the device under test:

modprobe vfio
modprobe vfio-pci
usertools/dpdk-devbind.py --bind=vfio-pci device_bus_id

1x 82599 NICs (1x 10GbE full duplex optical ports per NIC) plugged into the available PCIe Gen2 8-lane slots.

Build dpdk and examples=ip_reassembly:

CC=gcc meson -Denable_kmods=True -Dlibdir=lib –default-library=static <build_target> ninja -C <build_target>

meson configure -Dexamples=ip_reassembly <build_target> ninja -C <build_target>

83.2. Test Case: Send 1K packets, 4 fragments each and 1K maxflows

Sample command:

./<build_target>/examples/dpdk-ip_reassembly -c 0x2 -n 4 -- \
    -P -p 0x2 --config "(1,0,1)" --maxflows=1024 --flowttl=10s

Sends 1K packets split in 4 fragments each with a maxflows of 1K.

It expects:

  • 4K IP packets to be sent to the DUT.
  • 1K TCP packets being forwarded back to the TESTER.
  • 1K packets with a valid TCP checksum.

83.3. Test Case: Send 2K packets, 4 fragments each and 1K maxflows

Sample command:

./<build_target>/examples/dpdk-ip_reassembly -c 0x2 -n 4 -- \
    -P -p 0x2 --config "(1,0,1)" --maxflows=1024 --flowttl=10s

Sends 2K packets split in 4 fragments each with a maxflows of 1K.

It expects:

  • 8K IP packets to be sent to the DUT.
  • 1K TCP packets being forwarded back to the TESTER.
  • 1K packets with a valid TCP checksum.

83.4. Test Case: Send 4K packets, 7 fragments each and 4K maxflows

Sample command:

./<build_target>/examples/dpdk-ip_reassembly -c 0x2 -n 4 -- \
    -P -p 0x2 --config "(1,0,1)" --maxflows=4096 --flowttl=10s

Modifies the sample app source code to enable up to 7 fragments per packet, and it need set the “RTE_LIBRTE_IP_FRAG_MAX_FRAG=7” in ./config/rte_config.h and re-build DPDK.

Sends 4K packets split in 7 fragments each with a maxflows of 4K.

It expects:

  • 28K IP packets to be sent to the DUT.
  • 4K TCP packets being forwarded back to the TESTER.
  • 4K packets with a valid TCP checksum.

83.5. Test Case: Send +1K packets and ttl 3s; wait +ttl; send 1K packets

Sample command:

./<build_target>/examples/dpdk-ip_reassembly -c 0x2 -n 4 -- \
    -P -p 0x2 --config "(1,0,1)" --maxflows=1024 --flowttl=3s

Sends 1100 packets split in 4 fragments each.

It expects:

  • 4400 IP packets to be sent to the DUT.
  • 1K TCP packets being forwarded back to the TESTER.
  • 1K packets with a valid TCP checksum.

Then waits until the flowttl timeout and sends 1K packets.

It expects:

  • 4K IP packets to be sent to the DUT.
  • 1K TCP packets being forwarded back to the TESTER.
  • 1K packets with a valid TCP checksum.

83.6. Test Case: Send more packets than maxflows; only maxflows packets are forwarded back

Sample command:

./<build_target>/examples/dpdk-ip_reassembly -c 0x2 -n 4 -- \
    -P -p 0x2 --config "(1,0,1)" --maxflows=1023 --flowttl=5s

Sends 1K packets with maxflows equal to 1023.

It expects:

  • 4092 IP packets to be sent to the DUT.
  • 1023 TCP packets being forwarded back to the TESTER.
  • 1023 packets with a valid TCP checksum.

Then sends 1023 packets.

It expects:

  • 4092 IP packets to be sent to the DUT.
  • 1023 TCP packets being forwarded back to the TESTER.
  • 1023 packets with a valid TCP checksum.

Finally waits until the flowttl timeout and re-send 1K packets.

It expects:

  • 4092 IP packets to be sent to the DUT.
  • 1023 TCP packets being forwarded back to the TESTER.
  • 1023 packets with a valid TCP checksum.

83.7. Test Case: Send more fragments than supported

Sample command:

./<build_target>/examples/dpdk-ip_reassembly -c 0x2 -n 4 -- \
    -P -p 0x2 --config "(1,0,1)" --maxflows=1024 --flowttl=10s

Sends 1 frame split in into maximum fragments + 1 fragment, the packet can’t be forwarded back.

It expects:

  • (maximum fragments + 1 fragment) IP packets to be sent to the DUT.
  • 0 TCP packets being forwarded back to the TESTER.
  • 0 packets with a valid TCP checksum.

83.8. Test Case: Send 3 frames and delay the 4th; no frames are forwarded back

Sample command:

./<build_target>/examples/dpdk-ip_reassembly -c 0x2 -n 4 -- \
    -P -p 0x2 --config "(1,0,1)" --maxflows=1024 --flowttl=3s

Creates 1 packet split in 4 fragments. Sends the first 3 fragments and waits until the flowttl timeout. Then sends the 4th fragment.

It expects:

  • 4 IP packets to be sent to the DUT.
  • 0 TCP packets being forwarded back to the TESTER.
  • 0 packets with a valid TCP checksum.

83.9. Test Case: Send jumbo frames

Sample command:

./<build_target>/examples/dpdk-ip_reassembly -c 0x2 -n 4 -- \
    -P -p 0x2 --config "(1,0,1)" --maxflows=1024 --flowttl=10s --enable-jumbo --max-pkt-len=9500

Sets the NIC MTU to 9000 and sends 1K packets of 8900B split in 4 fragments of 2500B at the most. The reassembled packet size will not be bigger than the MTU previously defined.

It expects:

  • 4K IP packets to be sent to the DUT.
  • 1K TCP packets being forwarded back to the TESTER.
  • 1K packets with a valid TCP checksum.

83.10. Test Case: Send jumbo frames without enable them in the app

Sample command:

./<build_target>/examples/dpdk-ip_reassembly -c 0x2 -n 4 -- \
    -P -p 0x2 --config "(1,0,1)" --maxflows=1024 --flowttl=10s

Sends jumbo packets in the same way the previous test case does but without enabling support within the sample app.

It expects:

  • 4K IP packets to be sent to the DUT.
  • 0 TCP packets being forwarded back to the TESTER.
  • 0 packets with a valid TCP checksum.