Allow the provider of a midchain adjacency to pass context data that is returned...
[vpp.git] / src / vnet / lisp-gpe / lisp_gpe_adjacency.c
index 50662dd..7464af3 100644 (file)
@@ -250,7 +250,6 @@ lisp_gpe_increment_stats_counters (lisp_cp_main_t * lcm, ip_adjacency_t * adj,
   index_t lai;
   u32 si, di;
   gid_address_t src, dst;
-  lisp_stats_t *stats;
   uword *feip;
 
   ip46_address_to_ip_address (&adj->sub_type.nbr.next_hop, &rloc);
@@ -299,27 +298,17 @@ lisp_gpe_increment_stats_counters (lisp_cp_main_t * lcm, ip_adjacency_t * adj,
   key.tunnel_index = ladj->tunnel_index;
 
   uword *p = hash_get_mem (lgm->lisp_stats_index_by_key, &key);
-  if (p)
-    {
-      stats = pool_elt_at_index (lgm->lisp_stats_pool, p[0]);
-    }
-  else
-    {
-      pool_get (lgm->lisp_stats_pool, stats);
-      memset (stats, 0, sizeof (*stats));
+  ASSERT (p);
 
-      lisp_stats_key_t *key_copy = clib_mem_alloc (sizeof (*key_copy));
-      memcpy (key_copy, &key, sizeof (*key_copy));
-      hash_set_mem (lgm->lisp_stats_index_by_key, key_copy,
-                   stats - lgm->lisp_stats_pool);
-    }
-  stats->pkt_count++;
   /* compute payload length starting after GPE */
-  stats->bytes += b->current_length - (lisp_data - b->data - b->current_data);
+  u32 bytes = b->current_length - (lisp_data - b->data - b->current_data);
+  vlib_increment_combined_counter (&lgm->counters, vlib_get_thread_index (),
+                                  p[0], 1, bytes);
 }
 
 static void
-lisp_gpe_fixup (vlib_main_t * vm, ip_adjacency_t * adj, vlib_buffer_t * b)
+lisp_gpe_fixup (vlib_main_t * vm,
+               ip_adjacency_t * adj, vlib_buffer_t * b, const void *data)
 {
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
 
@@ -360,9 +349,10 @@ lisp_gpe_update_adjacency (vnet_main_t * vnm, u32 sw_if_index, adj_index_t ai)
   linkt = adj_get_link_type (ai);
   adj_nbr_midchain_update_rewrite
     (ai, lisp_gpe_fixup,
+     NULL,
      (VNET_LINK_ETHERNET == linkt ?
-      ADJ_MIDCHAIN_FLAG_NO_COUNT :
-      ADJ_MIDCHAIN_FLAG_NONE),
+      ADJ_FLAG_MIDCHAIN_NO_COUNT :
+      ADJ_FLAG_NONE),
      lisp_gpe_tunnel_build_rewrite (lgt, ladj,
                                    lisp_gpe_adj_proto_from_vnet_link_type
                                    (linkt)));