80. Fortville Cloud filters for QinQ steering Tests

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

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

80.2. Test Case 1: test qinq packet type

80.2.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 --tx-offloads=0x8fff  --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
    

80.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")
    

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

80.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 --tx-offloads=0x8fff  --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
    

80.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=4093)/IP(src="192.168.0.1", dst="192.168.0.2")/Raw('x' * 20)], iface="eth17")
    

80.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 --tx-offloads=0x8fff
    
  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 --rss-udp
    
  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 VF0 NICs:

    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x7c0 -n 4 --socket-mem=1024,1024 --file-prefix=vf1 -w 81:02.0 -- -i --rxq=4 --txq=4 --rss-udp
    
  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
    

80.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=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=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")
    

80.5. Test Case 4: qinq packet filter with diffierent 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 --tx-offloads=0x8fff
    
  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 --rss-udp
    
  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 VF0 NICs:

    ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x7c0 -n 4 --socket-mem=1024,1024 --file-prefix=vf1 -w 81:02.0 -- -i --rxq=4 --txq=4 --rss-udp
    
  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
    

80.5.1. tester Configuration

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

80.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").