VOM: mroutes
[vpp.git] / src / vnet / vxlan-gpe / decap.c
index 151ffa3..9c42929 100644 (file)
@@ -117,13 +117,13 @@ vxlan_gpe_input (vlib_main_t * vm,
   vxlan4_gpe_tunnel_key_t last_key4;
   vxlan6_gpe_tunnel_key_t last_key6;
   u32 pkts_decapsulated = 0;
-  u32 thread_index = vlib_get_thread_index ();
+  u32 thread_index = vm->thread_index;
   u32 stats_sw_if_index, stats_n_packets, stats_n_bytes;
 
   if (is_ip4)
-    memset (&last_key4, 0xff, sizeof (last_key4));
+    clib_memset (&last_key4, 0xff, sizeof (last_key4));
   else
-    memset (&last_key6, 0xff, sizeof (last_key6));
+    clib_memset (&last_key6, 0xff, sizeof (last_key6));
 
   from = vlib_frame_vector_args (from_frame);
   n_left_from = from_frame->n_vectors;
@@ -338,6 +338,9 @@ vxlan_gpe_input (vlib_main_t * vm,
          /* Required to make the l2 tag push / pop code work on l2 subifs */
          vnet_update_l2_len (b0);
 
+         /* Set packet input sw_if_index to unicast VXLAN tunnel for learning */
+         vnet_buffer (b0)->sw_if_index[VLIB_RX] = t0->sw_if_index;
+
       /**
        * ip[46] lookup in the configured FIB
        */
@@ -426,6 +429,9 @@ vxlan_gpe_input (vlib_main_t * vm,
          /* Required to make the l2 tag push / pop code work on l2 subifs */
          vnet_update_l2_len (b1);
 
+         /* Set packet input sw_if_index to unicast VXLAN tunnel for learning */
+         vnet_buffer (b1)->sw_if_index[VLIB_RX] = t1->sw_if_index;
+
          /*
           * ip[46] lookup in the configured FIB
           */
@@ -595,6 +601,9 @@ vxlan_gpe_input (vlib_main_t * vm,
          /* Required to make the l2 tag push / pop code work on l2 subifs */
          vnet_update_l2_len (b0);
 
+         /* Set packet input sw_if_index to unicast VXLAN tunnel for learning */
+         vnet_buffer (b0)->sw_if_index[VLIB_RX] = t0->sw_if_index;
+
          /*
           * ip[46] lookup in the configured FIB
           */
@@ -848,10 +857,8 @@ ip_vxlan_gpe_bypass_inline (vlib_main_t * vm,
            }
 
          /* Setup packet for next IP feature */
-         vnet_feature_next (vnet_buffer (b0)->sw_if_index[VLIB_RX], &next0,
-                            b0);
-         vnet_feature_next (vnet_buffer (b1)->sw_if_index[VLIB_RX], &next1,
-                            b1);
+         vnet_feature_next (&next0, b0);
+         vnet_feature_next (&next1, b1);
 
          if (is_ip4)
            {
@@ -1064,8 +1071,7 @@ ip_vxlan_gpe_bypass_inline (vlib_main_t * vm,
            ip60 = vlib_buffer_get_current (b0);
 
          /* Setup packet for next IP feature */
-         vnet_feature_next (vnet_buffer (b0)->sw_if_index[VLIB_RX], &next0,
-                            b0);
+         vnet_feature_next (&next0, b0);
 
          if (is_ip4)
            proto0 = ip40->protocol;