9. External Tag (E-tag) Tests

In some systems an additional external tag (E-tag) can be present before the VLAN. NIC X550 support VLANs in presence of external tags. E-tag mode is used for systems where the device adds a tag to identify a subsystem (usually a VM) and the near end switch adds a tag indicating the destination subsystem.

The support of E-tag features by X550 consists in: - The filtering of received E-tag packets - E-tag header stripping by VF device in received packets - E-tag header insertion by VF device in transmitted packets - E-tag forwarding to assigned VF by E-tag id

9.1. Prerequisites

  1. Create 2VF devices from PF device:

    ./dpdk_nic_bind.py --st
    0000:84:00.0 'Device 1563' drv=igb_uio unused=
    echo 2 > /sys/bus/pci/devices/0000\:84\:00.0/max_vfs
    
  2. Detach VFs from the host, bind them to pci-stub driver:

      /sbin/modprobe pci-stub
    
    using `lspci -nn|grep -i ethernet` got VF device id, for example "8086 1565"::
    
       echo "8086 1565" > /sys/bus/pci/drivers/pci-stub/new_id
       echo 0000:84:10.0 > /sys/bus/pci/devices/0000:84:10.0/driver/unbind
       echo 0000:84:10.0 > /sys/bus/pci/drivers/pci-stub/bind
       echo 0000:84:10.2 > /sys/bus/pci/devices/0000:84:10.2/driver/unbind
       echo 0000:84:10.2 > /sys/bus/pci/drivers/pci-stub/bind
    
  3. Passthrough VF 84:10.0 & 84:10.2 to vm0 and start vm0:

    /usr/bin/qemu-system-x86_64  -name vm0 -enable-kvm \
    -cpu host -smp 4 -m 2048 -drive file=/home/image/sriov-fc20-1.img -vnc :1 \
    -device pci-assign,host=84:10.0,id=pt_0 \
    -device pci-assign,host=84:10.2,id=pt_1
    
  4. Login vm0 and them bind VF devices to igb_uio driver:

    ./tools/dpdk_nic_bind.py --bind=igb_uio 00:04.0 00:05.0
    
  5. Start host testpmd, set it in rxonly mode and enable verbose output:

    testpmd -c f -n 3 -- -i
    testpmd> set fwd rxonly
    testpmd> set verbose 1
    testpmd> start
    
  6. Start guest testpmd, set it in mac forward mode:

    testpmd -c 0x3 -n 1  -- -i  --tx-offloads=0x8fff
    testpmd> set fwd mac
    testpmd> start
    

9.2. Test Case 1: L2 tunnel filter

Enable E-tag l2 tunnel support means enabling ability of parsing E-tag packet. This ability should be enabled before we enable filtering, forwarding, offloading for this specific type of tunnel:

testpmd> port config 0 l2-tunnel E-tag enable

Send 802.1BR packet to PF and VFs, check packet normally received.

  • type=0x893f - length=150 - nb_segs=1 - (outer) L2 type: Unknown
  • (outer) L3 type: IPV4 - (outer) L4 type: UDP

9.3. Test Case 2: E-tag filter

Enable E-tag packet forwarding and add E-tag on VF0, Send 802.1BR packet with broadcast mac and check packet only received on VF0:

testpmd> E-tag set forwarding on port 0
testpmd> E-tag set filter add e-tag-id 1000 dst-pool 0 port 0

Same E-tag forwarding to VF1, Send 802.1BR packet with broadcast mac and check packet only received on VF1:

testpmd> E-tag set filter add e-tag-id 1000 dst-pool 1 port 0

Same E-tag forwarding to PF0, Send 802.1BR packet with broadcast mac and check packet only received on PF:

testpmd> E-tag set filter add e-tag-id 1000 dst-pool 2 port 0

Remove E-tag, Send 802.1BR packet with broadcast mac and check packet not received:

testpmd> E-tag set filter del e-tag-id 1000 port 0

9.4. Test Case 3: E-tag insertion

Enable E-tag insertion in VF0, send normal packet to VF1 and check forwarded packet contain E-tag:

testpmd> E-tag set insertion on port-tag-id 1000 port 0 vf 0

9.5. Test Case 4: E-tag strip

Enable E-tag strip on PF, Send 802.1BR packet to VF and check forwarded packet without E-tag:

testpmd> E-tag set stripping on port 0

Disable E-tag strip on PF, Send 802.1BR packet and check forwarded packet with E-tag:

testpmd> E-tag set stripping off port 0