128. Shutdown API Feature Tests

This tests for Shutdown API feature can be run on linux userspace. It will check if NIC port can be stopped and restarted without exiting the application process. Furthermore, it will check if it can reconfigure new configurations for a port after the port is stopped, and if it is able to restart with those new configurations. It is based on testpmd application.

The test is performed by running the testpmd application and using a traffic generator. Port/queue configurations can be set interactively, and still be set at the command line when launching the application in order to be compatible with previous test framework.

128.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

Assume port A and B are connected to the remote ports, e.g. packet generator. To run the testpmd application in linuxapp environment with 4 lcores, 4 channels with other default parameters in interactive mode:

$ ./testpmd -c 0xf -n 4 -- -i

128.2. Test Case: Stop and Restart

  1. If the testpmd application is not launched, run it as above command. Follow below steps to check if it works well after re-configuring all ports without changing any configurations.
  2. Run start to start forwarding packets.
  3. Check that testpmd is able to forward traffic.
  4. Run stop to stop forwarding packets.
  5. Run port stop all to stop all ports.
  6. Check on the tester side that the ports are down using ethtool.
  7. Run port start all to restart all ports.
  8. Check on the tester side that the ports are up using ethtool
  9. Run start again to restart the forwarding, then start packet generator to transmit and receive packets, and check if testpmd is able to receive and forward packets successfully.

128.3. Test Case: Reset RX/TX Queues

  1. If the testpmd application is not launched, run it as above command. Follow below steps to check if it works well after reconfiguring all ports without changing any configurations.
  2. Run port stop all to stop all ports.
  3. Run port config all rxq 2 to change the number of receiving queues to two.
  4. Run port config all txq 2 to change the number of transmitting queues to two.
  5. Run port start all to restart all ports.
  6. Check with show config rxtx that the configuration for these parameters changed.
  7. Run start again to restart the forwarding, then start packet generator to transmit and receive packets, and check if testpmd is able to receive and forward packets successfully.

128.4. Test Case: Set promiscuous mode

  1. If the testpmd application is not launched, run it as above command. Follow below steps to check if promiscuous mode setting works well after reconfiguring it while all ports are stopped
  2. Run port stop all to stop all ports.
  3. Run set promisc all off to disable promiscuous mode on all ports.
  4. Run port start all to restart all ports.
  5. Run start again to restart the forwarding, then start packet generator to transmit and receive packets, and check that testpmd is NOT able to receive and forward packets successfully.
  6. Run port stop all to stop all ports.
  7. Run set promisc all on to enable promiscuous mode on all ports.
  8. Run port start all to restart all ports.
  9. Run start again to restart the forwarding, then start packet generator to transmit and receive packets, and check that testpmd is able to receive and forward packets successfully.

128.5. Test Case: Set allmulticast mode

  1. If the testpmd application is not launched, run it as above command. Follow below steps to check if allmulticast mode setting works well after reconfiguring it while all ports are stopped.
  2. Run set promisc all off to disable promiscuous mode on all ports.
  3. Run set allmulti all off to disable allmulticast mode on all ports.
  4. Run start again to restart the forwarding.
  5. Send packets with dst same to port address.
  6. Check that testpmd is able to receive and forward packets successfully.
  7. Send packets with unicast dst not same to port address.
  8. Check that testpmd is NOT able to receive and forward packets successfully.
  9. Send packets with multicast dst 01:00:00:33:00:01 packets.
  10. Check that testpmd is NOT able to receive and forward packets successfully.
  11. Run set allmulti all on to enable allmulticast mode on all ports.
  12. Send packets with multicast dst 01:00:00:33:00:01 packets.
  13. Check that testpmd is able to receive and forward packets successfully.
  14. Send packets with unicast dst not same to port address.
  15. Check that testpmd is NOT able to receive and forward packets successfully.
  16. Run set promisc all on to enable promiscuous mode on all ports.
  17. Send packets with unicast dst not same to port address.
  18. Check that testpmd is able to receive and forward packets successfully.

128.6. Test Case: Reconfigure All Ports With The Same Configurations (CRC)

  1. If the testpmd application is not launched, run it as above command. Follow below steps to check if it works well after reconfiguring all ports without changing any configurations.
  2. Run port stop all to stop all ports.
  3. Run port config all crc-strip on to enable the CRC stripping mode.
  4. Run port start all to restart all ports.
  5. Check with show config rxtx that the configuration for these parameters changed.
  6. Run start again to restart the forwarding, then start packet generator to transmit and receive packets, and check if testpmd is able to receive and forward packets successfully. Check that the packet received is 4 bytes smaller than the packet sent.

128.9. Test Case: Enable/Disable Jumbo Frame

  1. If the testpmd application is not launched, run it as above command. Follow below steps to check if it works well after reconfiguring all ports without changing any configurations.
  2. Run port stop all to stop all ports.
  3. Run port config all max-pkt-len 2048 to set the maximum packet length.
  4. Run port start all to restart all ports.
  5. Run start again to restart the forwarding, then start packet generator to transmit and receive packets, and check if testpmd is able to receive and forward packets successfully. Check this with the following packet sizes: 2047, 2048 & 2049. Only the third one should fail.

128.10. Test Case: Enable/Disable RSS

  1. If the testpmd application is not launched, run it as above command. Follow below steps to check if it works well after reconfiguring all ports without changing any configurations.
  2. Run port stop all to stop all ports.
  3. Run port config rss ip to enable RSS.
  4. Run port start all to restart all ports.
  5. Run start again to restart the forwarding, then start packet generator to transmit and receive packets, and check if testpmd is able to receive and forward packets successfully.

128.11. Test Case: Change the Number of rxd/txd

  1. If the testpmd application is not launched, run it as above command. Follow below steps to check if it works well after reconfiguring all ports without changing any configurations.
  2. Run port stop all to stop all ports.
  3. Run port config all rxd 1024 to change the rx descriptors.
  4. Run port config all txd 1024 to change the tx descriptors.
  5. Run port start all to restart all ports.
  6. Check with show config rxtx that the descriptors were actually changed.
  7. Run start again to restart the forwarding, then start packet generator to transmit and receive packets, and check if testpmd is able to receive and forward packets successfully.

128.13. Test Case: RX/TX descriptor status

  1. Lauch testpmd with rx/tx queue number --txq=16 --rxq=16 and rx/tx descriptor size --txd=4096 --rxd=4096
  2. Run show port 0 rxq * desc * status to check rx descriptor status.
  3. Check rx descriptor status can be AVAILABLE, DONE or UNAVAILABLE.
  4. Run show port 0 txq * desc * status to check tx descriptor status.
  5. Check tx descriptor status can be FULL, DONE or UNAVAILABLE.