• Sriram Krishnan's avatar
    hv_netvsc: add support for vlans in AF_PACKET mode · fdd8fac4
    Sriram Krishnan authored
    Vlan tagged packets are getting dropped when used with DPDK that uses
    the AF_PACKET interface on a hyperV guest.
    
    The packet layer uses the tpacket interface to communicate the vlans
    information to the upper layers. On Rx path, these drivers can read the
    vlan info from the tpacket header but on the Tx path, this information
    is still within the packet frame and requires the paravirtual drivers to
    push this back into the NDIS header which is then used by the host OS to
    form the packet.
    
    This transition from the packet frame to NDIS header is currently missing
    hence causing the host OS to drop the all vlan tagged packets sent by
    the drivers that use AF_PACKET (ETH_P_ALL) such as DPDK.
    
    Here is an overview of the changes in the vlan header in the packet path:
    
    The RX path (userspace handles everything):
      1. RX VLAN packet is stripped by HOST OS and placed in NDIS header
      2. Guest Kernel RX hv_netvsc packets and moves VLAN info from NDIS
         header into kernel SKB
      3. Kernel shares packets with user space application with PACKET_MMAP.
         The SKB VLAN info is copied to tpacket layer and indication set
         TP_STATUS_VLAN_VALID.
      4. The user space application will re-insert the VLAN info into the frame
    
    The TX path:
      1. The user space application has the VLAN info in the frame.
      2. Guest kernel gets packets from the application with PACKET_MMAP.
      3. The kernel later sends the frame to the hv_netvsc driver. The only way
         to send VLANs is when the SKB is setup & the VLAN is stripped from the
         frame.
      4. TX VLAN is re-inserted by HOST OS based on the NDIS header. If it sees
         a VLAN in the frame the packet is dropped.
    
    Cc: xe-linux-external@cisco.com
    Cc: Sriram Krishnan <srirakr2@cisco.com>
    Signed-off-by: default avatarSriram Krishnan <srirakr2@cisco.com>
    Reviewed-by: default avatarHaiyang Zhang <haiyangz@microsoft.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fdd8fac4
hyperv_net.h 40.5 KB