virtio: fix the coverity warning
[vpp.git] / src / vnet / devices / virtio / node.c
index ba17075..78a8dd5 100644 (file)
@@ -145,9 +145,6 @@ static_always_inline void
 virtio_needs_csum (vlib_buffer_t * b0, struct virtio_net_hdr_v1 *hdr,
                   u8 * l4_proto, u8 * l4_hdr_sz)
 {
-  *l4_proto = 0;
-  *l4_hdr_sz = 0;
-
   if (hdr->flags & VIRTIO_NET_HDR_F_NEEDS_CSUM)
 
     {
@@ -242,7 +239,7 @@ fill_gso_buffer_flags (vlib_buffer_t * b0, struct virtio_net_hdr_v1 *hdr,
 static_always_inline uword
 virtio_device_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
                            vlib_frame_t * frame, virtio_if_t * vif, u16 qid,
-                           int gso_enabled)
+                           int gso_enabled, int checksum_offload_enabled)
 {
   vnet_main_t *vnm = vnet_get_main ();
   u32 thread_index = vm->thread_index;
@@ -272,7 +269,7 @@ virtio_device_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
 
       while (n_left && n_left_to_next)
        {
-         u8 l4_proto, l4_hdr_sz;
+         u8 l4_proto = 0, l4_hdr_sz = 0;
          u16 num_buffers = 1;
          struct vring_used_elem *e = &vring->used->ring[last & mask];
          struct virtio_net_hdr_v1 *hdr;
@@ -289,7 +286,8 @@ virtio_device_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
          b0->total_length_not_including_first_buffer = 0;
          b0->flags = VLIB_BUFFER_TOTAL_LENGTH_VALID;
 
-         virtio_needs_csum (b0, hdr, &l4_proto, &l4_hdr_sz);
+         if (checksum_offload_enabled)
+           virtio_needs_csum (b0, hdr, &l4_proto, &l4_hdr_sz);
 
          if (gso_enabled)
            fill_gso_buffer_flags (b0, hdr, l4_proto, l4_hdr_sz);
@@ -396,10 +394,13 @@ VLIB_NODE_FN (virtio_input_node) (vlib_main_t * vm,
       {
        if (vif->gso_enabled)
          n_rx += virtio_device_input_inline (vm, node, frame, vif,
-                                             dq->queue_id, 1);
+                                             dq->queue_id, 1, 1);
+       else if (vif->csum_offload_enabled)
+         n_rx += virtio_device_input_inline (vm, node, frame, vif,
+                                             dq->queue_id, 0, 1);
        else
          n_rx += virtio_device_input_inline (vm, node, frame, vif,
-                                             dq->queue_id, 0);
+                                             dq->queue_id, 0, 0);
       }
   }