devices: skip checksum calculation if guest supports checksum offload 24/21424/1
authorSteven Luong <sluong@cisco.com>
Wed, 7 Aug 2019 04:51:34 +0000 (21:51 -0700)
committersteven luong <sluong@cisco.com>
Tue, 20 Aug 2019 23:02:48 +0000 (23:02 +0000)
Set VNET_HW_INTERFACE_FLAG_SUPPORTS_TX_L4_CKSUM_OFFLOAD for the interface
to skip checksum calculation if guest supports checksum offload.

Type: fix
Ticket: VPP-1750

Signed-off-by: Steven Luong <sluong@cisco.com>
Change-Id: Ie933c3462394f07580ef7f2bec1d2eb3b075bd0c
(cherry picked from commit a75ad876401a700127ebf234fc422e76fcd57b4c)

src/vnet/devices/virtio/vhost_user.c

index 788b348..c06f78c 100644 (file)
@@ -498,10 +498,14 @@ vhost_user_socket_read (clib_file_t * uf)
       ASSERT (vui->virtio_net_hdr_sz < VLIB_BUFFER_PRE_DATA_SIZE);
       vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, vui->hw_if_index);
       if (vui->enable_gso &&
-         (vui->features & (1ULL << FEAT_VIRTIO_NET_F_GUEST_CSUM)))
-       hw->flags |= VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO;
+         ((vui->features & FEATURE_VIRTIO_NET_F_HOST_GUEST_TSO_FEATURE_BITS)
+          == FEATURE_VIRTIO_NET_F_HOST_GUEST_TSO_FEATURE_BITS))
+       hw->flags |=
+         (VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO |
+          VNET_HW_INTERFACE_FLAG_SUPPORTS_TX_L4_CKSUM_OFFLOAD);
       else
-       hw->flags &= ~VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO;
+       hw->flags &= ~(VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO |
+                      VNET_HW_INTERFACE_FLAG_SUPPORTS_TX_L4_CKSUM_OFFLOAD);
       vnet_hw_interface_set_flags (vnm, vui->hw_if_index, 0);
       vui->is_ready = 0;
       vhost_user_update_iface_state (vui);