diff options
author | Filip Tehlar <ftehlar@cisco.com> | 2017-04-07 10:41:42 +0200 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2017-04-13 08:43:06 +0000 |
commit | 2151191e064e7a1fa37df436c0f771ee46fce3b0 (patch) | |
tree | 8d84816aedf0403cf9a9931f2346f48ece5be2d8 /src/vnet/lisp-cp/control.c | |
parent | 30d857cd07785461f993ec4a935d99af75673f4a (diff) |
LISP: make statistics thread safe
Change-Id: I056dc6246f79d887d69ad459a6b8b3092a099baa
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.c | 21 |
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; } |