112. Fortville Cloud filters for QinQ steering Tests

This document provides test plan for testing the function of Fortville: QinQ filter function

112.1. Prerequisites

1.Hardware:
Fortville HarborChannel_DP_OEMGEN_8MB_J24798-001_0.65_80002DA4 firmware-version: 5.70 0x80002da4 1.3908.0(fortville 25G) or 6.0.0+
2.Software:
dpdk: http://dpdk.org/git/dpdk scapy: http://www.secdev.org/projects/scapy/ disable vector mode when build dpdk

112.2. Test Case 1: test qinq packet type

112.2.1. Testpmd configuration - 4 RX/TX queues per port

  1. For fortville NICs need change the value of CONFIG_RTE_LIBRTE_I40E_INC_VECTOR in dpdk/config/common_base file to n.

  2. set up testpmd with fortville NICs:

    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x1f -n 4 -- -i --rxq=4 --txq=4 --disable-rss
    
  3. enable qinq:

    testpmd command: vlan set qinq on 0
    
  4. PMD fwd only receive the packets:

    testpmd command: set fwd rxonly
    
  5. verbose configuration:

    testpmd command: set verbose 1
    
  6. start packet receive:

    testpmd command: start
    

112.2.2. tester Configuration

  1. send dual vlan packet with scapy, verify it can be recognized as qinq packet:

    sendp([Ether(dst="3C:FD:FE:A3:A0:AE")/Dot1Q(type=0x8100,vlan=2)/Dot1Q(type=0x8100,vlan=3)/IP(src="192.168.0.1", dst="192.168.0.2")/Raw('x' * 20)], iface="eth17")
    

112.3. Test Case 2: qinq packet filter to PF queues

112.3.1. Testpmd configuration - 4 RX/TX queues per port

  1. set up testpmd with fortville NICs:

    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x1f -n 4 -- -i --rxq=4 --txq=4 --disable-rss
    
  2. enable qinq:

    testpmd command: vlan set qinq on 0
    
  3. PMD fwd only receive the packets:

    testpmd command: set fwd rxonly
    
  4. verbose configuration:

    testpmd command: set verbose 1
    
  5. start packet receive:

    testpmd command: start
    
  6. create filter rules:

    testpmd command: flow create 0 ingress pattern eth / vlan tci is 1 / vlan tci is 4093 / end actions pf / queue index 1 / end
    testpmd command: flow create 0 ingress pattern eth / vlan tci is 2 / vlan tci is 4094 / end actions pf / queue index 2 / end
    

112.3.2. tester Configuration

  1. send dual vlan packet with scapy, verify packets can filter to queues:

    sendp([Ether(dst="3C:FD:FE:A3:A0:AE")/Dot1Q(type=0x8100,vlan=1)/Dot1Q(type=0x8100,vlan=4093)/IP(src="192.168.0.1", dst="192.168.0.2")/Raw('x' * 20)], iface="eth17")
    sendp([Ether(dst="3C:FD:FE:A3:A0:AE")/Dot1Q(type=0x8100,vlan=2)/Dot1Q(type=0x8100,vlan=4094)/IP(src="192.168.0.1", dst="192.168.0.2")/Raw('x' * 20)], iface="eth17")
    

112.4. Test Case 3: qinq packet filter to VF queues

  1. create VF on dut:

    linux cmdline: echo 2 > /sys/bus/pci/devices/0000:81:00.0/max_vfs
    
  2. bind igb_uio to vfs:

    linux cmdline: ./usertools/dpdk-devbind.py -b igb_uio 81:02.0 81:02.1
    
  3. set up testpmd with fortville PF NICs:

    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x1f -n 4 --socket-mem=1024,1024 --file-prefix=pf -w 81:00.0 -- -i --rxq=4 --txq=4
    
  4. enable qinq:

    testpmd command: vlan set qinq on 0
    
  5. PMD fwd only receive the packets:

    testpmd command: set fwd rxonly
    
  6. verbose configuration:

    testpmd command: set verbose 1
    
  7. start packet receive:

    testpmd command: start
    
  8. create filter rules:

    testpmd command: flow create 0 ingress pattern eth / vlan tci is 1 / vlan tci is 4093 / end actions vf id 0 / queue index 2 / end
    testpmd command: flow create 0 ingress pattern eth / vlan tci is 2 / vlan tci is 4094 / end actions vf id 1 / queue index 3 / end
    testpmd command: flow create 0 ingress pattern eth / vlan tci is 3 / vlan tci is 4094 / end actions pf / queue index 1 / end
    
  9. set up testpmd with fortville VF0 NICs:

    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x3e0 -n 4 --socket-mem=1024,1024 --file-prefix=vf0 -w 81:02.0 -- -i --rxq=4 --txq=4
    
  10. PMD fwd only receive the packets:

    testpmd command: set fwd rxonly
    
  11. verbose configuration:

    testpmd command: set verbose 1
    
  12. start packet receive:

    testpmd command: start
    
  13. set up testpmd with fortville VF1 NICs:

    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x7c0 -n 4 --socket-mem=1024,1024 --file-prefix=vf1 -w 81:02.1 -- -i --rxq=4 --txq=4
    
  14. PMD fwd only receive the packets:

    testpmd command: set fwd rxonly
    
  15. verbose configuration:

    testpmd command: set verbose 1
    
  16. start packet receive:

    testpmd command: start
    

112.4.1. tester Configuration

  1. send dual vlan packet with scapy, verify packets can filter to the corresponding PF and VF queues:

    sendp([Ether(dst="3C:FD:FE:A3:A0:AE")/Dot1Q(type=0x8100,vlan=1)/Dot1Q(type=0x8100,vlan=4093)/IP(src="192.168.0.1", dst="192.168.0.2")/Raw('x' * 20)], iface="eth17")
    sendp([Ether(dst="3C:FD:FE:A3:A0:AE")/Dot1Q(type=0x8100,vlan=2)/Dot1Q(type=0x8100,vlan=4094)/IP(src="192.168.0.1", dst="192.168.0.2")/Raw('x' * 20)], iface="eth17")
    sendp([Ether(dst="3C:FD:FE:A3:A0:AE")/Dot1Q(type=0x8100,vlan=3)/Dot1Q(type=0x8100,vlan=4094)/IP(src="192.168.0.1", dst="192.168.0.2")/Raw('x' * 20)], iface="eth17")
    

112.5. Test Case 4: qinq packet filter with different tpid

  1. create VF on dut:

    linux cmdline: echo 2 > /sys/bus/pci/devices/0000:81:00.0/max_vfs
    
  2. bind igb_uio to vfs:

    linux cmdline: ./usertools/dpdk-devbind.py -b igb_uio 81:02.0 81:02.1
    
  3. set up testpmd with fortville PF NICs:

    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x1f -n 4 --socket-mem=1024,1024 --file-prefix=pf -w 81:00.0 -- -i --rxq=4 --txq=4
    
  4. enable qinq:

    testpmd command: vlan set qinq on 0
    
  5. PMD fwd only receive the packets:

    testpmd command: set fwd rxonly
    
  6. verbose configuration:

    testpmd command: set verbose 1
    
  7. start packet receive:

    testpmd command: start
    
  8. change S-Tag+C-Tag VLAN TPIDs to 0x88A8 + 0x8100:

    testpmd command: vlan set outer tpid 0x88a8 0
    
  9. create filter rules:

    testpmd command: flow create 0 ingress pattern eth / vlan tci is 1 / vlan tci is 4093 / end actions vf id 0 / queue index 2 / end
    testpmd command: flow create 0 ingress pattern eth / vlan tci is 2 / vlan tci is 4094 / end actions vf id 1 / queue index 3 / end
    testpmd command: flow create 0 ingress pattern eth / vlan tci is 3 / vlan tci is 4094 / end actions pf / queue index 1 / end
    
  10. set up testpmd with fortville VF0 NICs:

    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x3e0 -n 4 --socket-mem=1024,1024 --file-prefix=vf0 -w 81:02.0 -- -i --rxq=4 --txq=4
    
  11. PMD fwd only receive the packets:

    testpmd command: set fwd rxonly
    
  12. verbose configuration:

    testpmd command: set verbose 1
    
  13. start packet receive:

    testpmd command: start
    
  14. set up testpmd with fortville VF1 NICs:

    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x7c0 -n 4 --socket-mem=1024,1024 --file-prefix=vf1 -w 81:02.1 -- -i --rxq=4 --txq=4
    
  15. PMD fwd only receive the packets:

    testpmd command: set fwd rxonly
    
  16. verbose configuration:

    testpmd command: set verbose 1
    
  17. start packet receive:

    testpmd command: start
    

112.5.1. tester Configuration

  1. send dual vlan packet with scapy, verify packets can filter to the corresponding VF queues.
  2. send qinq packet with traffic generator, verify packets can filter to the corresponding VF queues.

112.6. Note

  1. How to send packet with specific TPID with scapy:

    1. wrpcap("qinq.pcap",[Ether(dst="3C:FD:FE:A3:A0:AE")/Dot1Q(type=0x8100,vlan=1)/Dot1Q(type=0x8100,vlan=4092)/IP(src="192.168.0.1", dst="192.168.0.2")/Raw('x' * 20)]).
    2. hexedit qinq.pcap; change tpid field, "ctrl+w" to save, "ctrl+x" to exit.
    3. sendp(rdpcap("qinq.pcap"), iface="eth17").