LISP: Enhance IPx offset computing
[vpp.git] / src / vnet / ip / ip6_forward.c
index b5c7955..197a9b7 100644 (file)
@@ -404,8 +404,10 @@ ip6_sw_interface_enable_disable (u32 sw_if_index, u32 is_enable)
     }
   else
     {
-      ASSERT (im->ip_enabled_by_sw_if_index[sw_if_index] > 0);
-      if (0 != --im->ip_enabled_by_sw_if_index[sw_if_index])
+      /* The ref count is 0 when an address is removed from an interface that has
+       * no address - this is not a ciritical error */
+      if (0 == im->ip_enabled_by_sw_if_index[sw_if_index] ||
+         0 != --im->ip_enabled_by_sw_if_index[sw_if_index])
        return;
     }
 
@@ -1361,6 +1363,9 @@ ip6_local (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame)
          ip0 = vlib_buffer_get_current (p0);
          ip1 = vlib_buffer_get_current (p1);
 
+         vnet_buffer (p0)->ip.start_of_ip_header = p0->current_data;
+         vnet_buffer (p1)->ip.start_of_ip_header = p1->current_data;
+
          type0 = lm->builtin_protocol_by_ip_protocol[ip0->protocol];
          type1 = lm->builtin_protocol_by_ip_protocol[ip1->protocol];
 
@@ -1508,6 +1513,8 @@ ip6_local (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame)
 
          ip0 = vlib_buffer_get_current (p0);
 
+         vnet_buffer (p0)->ip.start_of_ip_header = p0->current_data;
+
          type0 = lm->builtin_protocol_by_ip_protocol[ip0->protocol];
          next0 = lm->local_next_by_ip_protocol[ip0->protocol];