• John Fastabend's avatar
    virtio_net: Add XDP support · f600b690
    John Fastabend authored
    This adds XDP support to virtio_net. Some requirements must be
    met for XDP to be enabled depending on the mode. First it will
    only be supported with LRO disabled so that data is not pushed
    across multiple buffers. Second the MTU must be less than a page
    size to avoid having to handle XDP across multiple pages.
    
    If mergeable receive is enabled this patch only supports the case
    where header and data are in the same buf which we can check when
    a packet is received by looking at num_buf. If the num_buf is
    greater than 1 and a XDP program is loaded the packet is dropped
    and a warning is thrown. When any_header_sg is set this does not
    happen and both header and data is put in a single buffer as expected
    so we check this when XDP programs are loaded.  Subsequent patches
    will process the packet in a degraded mode to ensure connectivity
    and correctness is not lost even if backend pushes packets into
    multiple buffers.
    
    If big packets mode is enabled and MTU/LRO conditions above are
    met then XDP is allowed.
    
    This patch was tested with qemu with vhost=on and vhost=off where
    mergeable and big_packet modes were forced via hard coding feature
    negotiation. Multiple buffers per packet was forced via a small
    test patch to vhost.c in the vhost=on qemu mode.
    Suggested-by: default avatarShrijeet Mukherjee <shrijeet@gmail.com>
    Signed-off-by: default avatarJohn Fastabend <john.r.fastabend@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f600b690
virtio_net.c 57.9 KB