Hi All,
        I am using DPDK 18.11.2 and i40e PF linux driver on the host 2.4.6. I 
see there, when I enable DEV_RX_OFFLOAD_VLAN_FILTER from the DPDK app, and then 
configure the specific vlan id using rte_eth_dev_vlan_filter(). As per DPDK 
code by default when we do dev_configure, we call i40evf_init_vlan() and if we 
don't enable rxmode.offloads with DEV_RX_OFFLOAD_VLAN_STRIP, then we should 
send VIRTCHNL_OP_DISABLE_VLAN_STRIPPING command to the PF from the guest.

With more debugging enabled, when DPDK requests VLAN filtering by sending 
VIRTCHNL_OP_ADD_VLAN to the PF, then we see that the VF stripping is enabled 
also on Linux. If we don't add VLAN ID and send VIRTCHNL_OP_ADD_VLAN message 
down to the PF , then we do receive packets with VLAN ID set.
The same works fine in VmWare drivers, where we do receive VALN id in the 
packets if STRIP is disabled.

In the linux case, when we receive frames with VLAN headers, the vlan id is 
stripped at the PF, and the TCI will record the missing VLAN details when 
handed up to the DPDK driver.

With i40e debug enabled, it's clear to see the difference being reported in 
i40e_rxd_to_vlan_tci:


Example using VLAN on i40evf SR-IOV (vlan fails):
  PMD: i40e_rxd_to_vlan_tci(): Mbuf vlan_tci: 8, vlan_tci_outer: 0
  Port 0 pkt-len=60 nb-segs=1
    ETH:  src=00:10:E0:8D:A7:52 dst=FF:FF:FF:FF:FF:FF type=0x0806
    ARP:  hrd=1 proto=0x0800 hln=6 pln=4 op=1 (ARP Request)
          sha=00:10:E0:8D:A7:52 sip=8.8.8.102
          tha=00:00:00:00:00:00 tip=8.8.8.3

As the application requested tagging not be stripped, and the hardware driver 
was not able to disable strip, in my opinion either DPDK or linux driver should 
have a bug in handing this. Also as we see VmWare i40e driver working it could 
be either a extra config required for linux driver or a bug in linux driver.
I also tried to add a call to rte_vlan_insert() to reinstate the VLAN header 
using the data from TCI in i40e_rxd_to_vlan_tci(), but it is having performance 
impacts as expected. Also as rte_vlan_insert() does not support QINQ, it will 
have other issues too.

Can you please clarify if this is working for i40e vlan filter test and if we 
are missing something in the DPDK, like sending 
VIRTCHNL_OP_DISABLE_VLAN_STRIPPING after every VIRTCHNL_OP_ADD_VLAN if 
DEV_RX_OFFLOAD_VLAN_STRIP is not set by the DPDk app.

--
Regards,
Souvik

Reply via email to