Fix the ip header offset counting in vnet/ipsec

IP header is set as data + sizeof(ethernet_header_t),
what does not need to be true. The solution is to use
l3_hdr_offset.

Change-Id: I5d9f41599ba8d8eb14ce2d9d523f82ea6e0fd10d
Signed-off-by: Szymon Sliwa <szs@semihalf.com>
diff --git a/src/vnet/ipsec/esp_decrypt.c b/src/vnet/ipsec/esp_decrypt.c
index a769e6b..62b12db 100644
--- a/src/vnet/ipsec/esp_decrypt.c
+++ b/src/vnet/ipsec/esp_decrypt.c
@@ -268,9 +268,10 @@
 	      if (PREDICT_FALSE (!sa0->is_tunnel && !sa0->is_tunnel_ip6))
 		{
 		  tunnel_mode = 0;
+
 		  ih4 =
-		    (ip4_header_t *) (i_b0->data +
-				      sizeof (ethernet_header_t));
+		    (ip4_header_t *) ((u8 *) i_b0->data +
+				      vnet_buffer (i_b0)->l3_hdr_offset);
 		  if (PREDICT_TRUE
 		      ((ih4->ip_version_and_header_length & 0xF0) != 0x40))
 		    {
@@ -280,9 +281,7 @@
 			{
 			  transport_ip6 = 1;
 			  ip_hdr_size = sizeof (ip6_header_t);
-			  ih6 =
-			    (ip6_header_t *) (i_b0->data +
-					      sizeof (ethernet_header_t));
+			  ih6 = (ip6_header_t *) ih4;
 			  oh6 = vlib_buffer_get_current (o_b0);
 			}
 		      else