vnet: complete the fix for l3_hdr_offset calculation for single loop fastpass case... 56/15256/3
authorAndrew Yourtchenko <ayourtch@gmail.com>
Wed, 10 Oct 2018 14:15:55 +0000 (16:15 +0200)
committerMarco Varlese <marco.varlese@suse.de>
Fri, 12 Oct 2018 13:22:08 +0000 (13:22 +0000)
20e6d36b has moved the calculation of the l3_hdr_offset into the determine_next_node()
function, with the assumption that the current_data in the buffer is at
the L3 header. This is not the case for the single loop fastpath,
where the vlib_buffer_advance() call is made after the call to
determine_next_node(), as a day1 behavior. As a result - that path
incorrectly sets the l3_hdr_offset.

Solution: move the vlib_buffer_advance() call to before determine_next_node()

Change-Id: Id5eaa084c43fb6564f8239df4a0b3dc0412b15de
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
(cherry picked from commit 376414f4c3f53af44da4e82ee5d0b1843b291f8e)

src/vnet/ethernet/node.c

index 0034577..53d5b4e 100755 (executable)
@@ -657,9 +657,9 @@ ethernet_input_inline (vlib_main_t * vm,
                      (hi->hw_address != 0) &&
                      !eth_mac_equal ((u8 *) e0, hi->hw_address))
                    error0 = ETHERNET_ERROR_L3_MAC_MISMATCH;
+                 vlib_buffer_advance (b0, sizeof (ethernet_header_t));
                  determine_next_node (em, variant, 0, type0, b0,
                                       &error0, &next0);
-                 vlib_buffer_advance (b0, sizeof (ethernet_header_t));
                }
              goto ship_it0;
            }