summaryrefslogtreecommitdiffstats
path: root/src/vnet/lisp-cp/control.c
diff options
context:
space:
mode:
authorFilip Tehlar <ftehlar@cisco.com>2017-04-10 07:54:31 +0200
committerFlorin Coras <florin.coras@gmail.com>2017-04-11 06:30:06 +0000
commit5e189f1a8862f5a8f837dc612c15d63d2b9b6457 (patch)
tree6273347a54f84cb5645124d4a120f116e293fcf6 /src/vnet/lisp-cp/control.c
parent92bcecfdcc8b44877349fe952339a8bb24be6dfc (diff)
LSIP: make LISP statistics collecting thread safe, VPP-692
Change-Id: If884835c0f63de162ecf75fecd2a63a1240ee910 Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Diffstat (limited to 'src/vnet/lisp-cp/control.c')
-rw-r--r--src/vnet/lisp-cp/control.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/vnet/lisp-cp/control.c b/src/vnet/lisp-cp/control.c
index 5c901f368c3..ebbd1be2e37 100644
--- a/src/vnet/lisp-cp/control.c
+++ b/src/vnet/lisp-cp/control.c
@@ -285,7 +285,7 @@ dp_del_fwd_entry (lisp_cp_main_t * lcm, u32 src_map_index, u32 dst_map_index)
if (fe->is_src_dst)
gid_address_copy (&a->lcl_eid, &fe->leid);
- vnet_lisp_del_fwd_stats (a, feip[0]);
+ vnet_lisp_gpe_del_fwd_counters (a, feip[0]);
vnet_lisp_gpe_add_del_fwd_entry (a, &sw_if_index);
/* delete entry in fwd table */
@@ -532,10 +532,18 @@ dp_add_fwd_entry (lisp_cp_main_t * lcm, u32 src_map_index, u32 dst_map_index)
a->action = rmt_map->action;
}
- vnet_lisp_gpe_add_del_fwd_entry (a, &sw_if_index);
+ rv = vnet_lisp_gpe_add_del_fwd_entry (a, &sw_if_index);
+ if (rv)
+ {
+ if (a->locator_pairs)
+ vec_free (a->locator_pairs);
+ return;
+ }
- /* add tunnel to fwd entry table XXX check return value from DP insertion */
+ /* add tunnel to fwd entry table */
pool_get (lcm->fwd_entry_pool, fe);
+ vnet_lisp_gpe_add_fwd_counters (a, fe - lcm->fwd_entry_pool);
+
fe->locator_pairs = a->locator_pairs;
gid_address_copy (&fe->reid, &a->rmt_eid);
@@ -3608,7 +3616,8 @@ lisp_stats_api_fill (lisp_cp_main_t * lcm, lisp_gpe_main_t * lgm,
lisp_api_stats_t * stat, lisp_stats_key_t * key,
u32 stats_index)
{
- lisp_stats_t *s;
+ vlib_counter_t v;
+ vlib_combined_counter_main_t *cm = &lgm->counters;
lisp_gpe_fwd_entry_key_t fwd_key;
const lisp_gpe_tunnel_t *lgt;
fwd_entry_t *fe;
@@ -3627,8 +3636,8 @@ lisp_stats_api_fill (lisp_cp_main_t * lcm, lisp_gpe_main_t * lgm,
stat->loc_rloc = lgt->key->lcl;
stat->rmt_rloc = lgt->key->rmt;
- s = pool_elt_at_index (lgm->lisp_stats_pool, stats_index);
- stat->stats = *s;
+ vlib_get_combined_counter (cm, stats_index, &v);
+ stat->counters = v;
return 1;
}