130. Intel® Ethernet 700 Series Cloud filters for QinQ steering Tests

This document provides test plan for testing the function of Intel® Ethernet 700 Series: QinQ filter function

130.1. Prerequisites

1.Hardware:
Intel® Ethernet 700 Series HarborChannel_DP_OEMGEN_8MB_J24798-001_0.65_80002DA4 firmware-version: 5.70 0x80002da4 1.3908.0(Intel® Ethernet Network Adapter XXV710-DA2) 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

130.2. Test Case 1: test qinq packet type

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

  1. set up testpmd with Intel® Ethernet 700 Series NICs:

    ./x86_64-native-linuxapp-gcc/app/dpdk-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
    

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

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

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

  1. set up testpmd with Intel® Ethernet 700 Series NICs:

    ./x86_64-native-linuxapp-gcc/app/dpdk-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
    

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

130.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 Intel® Ethernet 700 Series PF NICs:

    ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x1f -n 4 --socket-mem=1024,1024 --file-prefix=pf -a 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 Intel® Ethernet 700 Series VF0 NICs:

    ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x3e0 -n 4 --socket-mem=1024,1024 --file-prefix=vf0 -a 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 Intel® Ethernet 700 Series VF1 NICs:

    ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c0 -n 4 --socket-mem=1024,1024 --file-prefix=vf1 -a 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
    

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

130.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 Intel® Ethernet 700 Series PF NICs:

    ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x1f -n 4 --socket-mem=1024,1024 --file-prefix=pf -a 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 Intel® Ethernet 700 Series VF0 NICs:

    ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x3e0 -n 4 --socket-mem=1024,1024 --file-prefix=vf0 -a 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 Intel® Ethernet 700 Series VF1 NICs:

    ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c0 -n 4 --socket-mem=1024,1024 --file-prefix=vf1 -a 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
    

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

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