virtio: use current_data as l2_hdr_offset 20/37520/1
authorMohsin Kazmi <sykazmi@cisco.com>
Tue, 25 Oct 2022 19:27:08 +0000 (19:27 +0000)
committerMohsin Kazmi <sykazmi@cisco.com>
Tue, 25 Oct 2022 19:29:33 +0000 (19:29 +0000)
Type: fix

virtio transmit node uses header offsets to set the
appropriate metadata for packet with offloads. But
l2_hdr_offset is not correctly set by previous node(s).
This patch makes use of curren_data field as l2_hdr_offset.

Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
Change-Id: Id2f41a7650be45c9cc1ebacc7bec298be79bf218

src/vnet/devices/virtio/device.c

index e97da1d..2063865 100644 (file)
@@ -309,8 +309,7 @@ set_checksum_offsets (vlib_buffer_t *b, vnet_virtio_net_hdr_v1_t *hdr,
                      const int is_l2)
 {
   vnet_buffer_oflags_t oflags = vnet_buffer (b)->oflags;
-  i16 l4_hdr_offset =
-    vnet_buffer (b)->l4_hdr_offset - vnet_buffer (b)->l2_hdr_offset;
+  i16 l4_hdr_offset = vnet_buffer (b)->l4_hdr_offset - b->current_data;
   if (b->flags & VNET_BUFFER_F_IS_IP4)
     {
       ip4_header_t *ip4;
@@ -377,8 +376,7 @@ set_gso_offsets (vlib_buffer_t *b, vnet_virtio_net_hdr_v1_t *hdr,
                 const int is_l2)
 {
   vnet_buffer_oflags_t oflags = vnet_buffer (b)->oflags;
-  i16 l4_hdr_offset =
-    vnet_buffer (b)->l4_hdr_offset - vnet_buffer (b)->l2_hdr_offset;
+  i16 l4_hdr_offset = vnet_buffer (b)->l4_hdr_offset - b->current_data;
 
   if (b->flags & VNET_BUFFER_F_IS_IP4)
     {