VPP-414: Fixed IPSec transport mode in esp_encrypt.c 34/3034/2
authorMatus Fabian <[email protected]>
Wed, 21 Sep 2016 12:13:01 +0000 (05:13 -0700)
committerDamjan Marion <[email protected]>
Wed, 21 Sep 2016 15:12:38 +0000 (15:12 +0000)
Change-Id: I27accb0c87d6bf2fbbe90d8d1bc074697299e639
Signed-off-by: Matus Fabian <[email protected]>
vnet/vnet/ipsec/esp_encrypt.c

index 193c084..ba7579d 100644 (file)
@@ -299,13 +299,15 @@ esp_encrypt_node_fn (vlib_main_t * vm,
            }
          else
            {
-             vlib_buffer_advance (i_b0, ip_hdr_size);
              next_hdr_type = ip_proto;
              if (vnet_buffer (i_b0)->sw_if_index[VLIB_TX] != ~0)
                {
                  transport_mode = 1;
                  ethernet_header_t *ieh0, *oeh0;
-                 ieh0 = (ethernet_header_t *) i_b0->data;
+                 ieh0 =
+                   (ethernet_header_t *) ((u8 *)
+                                          vlib_buffer_get_current (i_b0) -
+                                          sizeof (ethernet_header_t));
                  oeh0 = (ethernet_header_t *) o_b0->data;
                  clib_memcpy (oeh0, ieh0, sizeof (ethernet_header_t));
                  next0 = ESP_ENCRYPT_NEXT_INTERFACE_OUTPUT;
@@ -315,6 +317,7 @@ esp_encrypt_node_fn (vlib_main_t * vm,
                  vnet_buffer (o_b0)->output_features.bitmap =
                    vnet_buffer (i_b0)->output_features.bitmap;
                }
+             vlib_buffer_advance (i_b0, ip_hdr_size);
            }
 
          ASSERT (sa0->crypto_alg < IPSEC_CRYPTO_N_ALG);