Skip to content
  • Vincenzo Maffione's avatar
    tap: add support for virtio-net offloads · f8bc74e2
    Vincenzo Maffione authored
    This patch is part of an effort to make bhyve networking (in particular TCP)
    faster. The key strategy to enhance TCP throughput is to let the whole packet
    datapath work with TSO/LRO packets (up to 64KB each), so that the per-packet
    overhead is amortized over a large number of bytes.
    This capability is supported in the guest by means of the vtnet(4) driver,
    which is able to handle TSO/LRO packets leveraging the virtio-net header
    (see struct virtio_net_hdr and struct virtio_net_hdr_mrg_rxbuf).
    A bhyve VM exchanges packets with the host through a network backend,
    which can be vale(4) or if_tap(4).
    While vale(4) supports TSO/LRO packets, if_tap(4) does not.
    This patch extends if_tap(4) with the ability to understand the virtio-net
    header, so that a tapX interface can process TSO/LRO packets.
    A couple of ioctl commands have been added to configure and probe the
    virtio-net header. Once the virtio-net header is set, the tapX interface
    acquires all the IFCAP capabilities necessary for TSO/LRO.
    
    Reviewed by:	kevans
    Differential Revision:	https://reviews.freebsd.org/D21263
    f8bc74e2