• G
    virtio-net: use the backend cross-endian capabilities · 1bfa316c
    Greg Kurz 提交于
    When running a fully emulated device in cross-endian conditions, including
    a virtio 1.0 device offered to a big endian guest, we need to fix the vnet
    headers. This is currently handled by the virtio_net_hdr_swap() function
    in the core virtio-net code but it should actually be handled by the net
    backend.
    
    With this patch, virtio-net now tries to configure the backend to do the
    endian fixing when the device starts (i.e. drivers sets the CONFIG_OK bit).
    If the backend cannot support the requested endiannes, we have to fallback
    onto virtio_net_hdr_swap(): this is recorded in the needs_vnet_hdr_swap flag,
    to be used in the TX and RX paths.
    
    Note that we reset the backend to the default behaviour (guest native
    endianness) when the device stops (i.e. device status had CONFIG_OK bit and
    driver unsets it). This is needed, with the linux tap backend at least,
    otherwise the guest may lose network connectivity if rebooted into a
    different endianness.
    
    The current vhost-net code also tries to configure net backends. This will
    be no more needed and will be reverted in a subsequent patch.
    Reviewed-by: NCornelia Huck <cornelia.huck@de.ibm.com>
    Reviewed-by: NLaurent Vivier <lvivier@redhat.com>
    Signed-off-by: NGreg Kurz <gkurz@linux.vnet.ibm.com>
    Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
    Reviewed-by: NLaurent Vivier <lvivier@redhat.com>
    1bfa316c
virtio-net.h 2.5 KB