virtio: vhost checksum problem for ipv6 82/26782/1
authorSteven Luong <[email protected]>
Sun, 5 Apr 2020 23:09:17 +0000 (16:09 -0700)
committersteven luong <[email protected]>
Wed, 29 Apr 2020 03:51:30 +0000 (03:51 +0000)
When checksum is enable for IPv6, it erroneously set the flag
VNET_BUFFER_F_OFFLOAD_IP_CKSUM. That flag is meant for ip4 packets only.

Type: fix
Ticket: VPP-1857

Signed-off-by: Steven Luong <[email protected]>
Change-Id: Id03b2937bfa34e2a9b50a36aafe0700bad7fb95e
(cherry picked from commit f78294d8468f156e066e7e69aab3a1b285810c3a)
(cherry picked from commit 82b62bbf58bc3d1143a359d8f58f7be2f473cddd)

src/vnet/devices/virtio/vhost_user_input.c

index 1c3e180..86ab3bf 100644 (file)
@@ -275,14 +275,14 @@ vhost_user_handle_rx_offload (vlib_buffer_t * b0, u8 * b0_data,
       vnet_buffer (b0)->l4_hdr_offset = hdr->csum_start;
       b0->flags |= (VNET_BUFFER_F_L2_HDR_OFFSET_VALID |
                    VNET_BUFFER_F_L3_HDR_OFFSET_VALID |
-                   VNET_BUFFER_F_L4_HDR_OFFSET_VALID |
-                   VNET_BUFFER_F_OFFLOAD_IP_CKSUM);
+                   VNET_BUFFER_F_L4_HDR_OFFSET_VALID);
 
       if (PREDICT_TRUE (ethertype == ETHERNET_TYPE_IP4))
        {
          ip4_header_t *ip4 = (ip4_header_t *) (b0_data + l2hdr_sz);
          l4_proto = ip4->protocol;
-         b0->flags |= VNET_BUFFER_F_IS_IP4;
+         b0->flags |= (VNET_BUFFER_F_IS_IP4 |
+                       VNET_BUFFER_F_OFFLOAD_IP_CKSUM);
        }
       else if (PREDICT_TRUE (ethertype == ETHERNET_TYPE_IP6))
        {