From 5e189f1a8862f5a8f837dc612c15d63d2b9b6457 Mon Sep 17 00:00:00 2001 From: Filip Tehlar Date: Mon, 10 Apr 2017 07:54:31 +0200 Subject: LSIP: make LISP statistics collecting thread safe, VPP-692 Change-Id: If884835c0f63de162ecf75fecd2a63a1240ee910 Signed-off-by: Filip Tehlar --- src/vnet/lisp-cp/control.c | 21 +++++++++++++++------ src/vnet/lisp-cp/one_api.c | 4 ++-- src/vnet/lisp-cp/one_cli.c | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) (limited to 'src/vnet/lisp-cp') 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; } diff --git a/src/vnet/lisp-cp/one_api.c b/src/vnet/lisp-cp/one_api.c index ab9e7a635ce..9a07908db3a 100644 --- a/src/vnet/lisp-cp/one_api.c +++ b/src/vnet/lisp-cp/one_api.c @@ -1366,8 +1366,8 @@ vl_api_one_stats_dump_t_handler (vl_api_one_stats_dump_t * mp) ip_address_copy_addr (rmp->rloc, &stat->rmt_rloc); ip_address_copy_addr (rmp->lloc, &stat->loc_rloc); - rmp->pkt_count = clib_host_to_net_u32 (stat->stats.pkt_count); - rmp->bytes = clib_host_to_net_u32 (stat->stats.bytes); + rmp->pkt_count = clib_host_to_net_u32 (stat->counters.packets); + rmp->bytes = clib_host_to_net_u32 (stat->counters.bytes); })); /* *INDENT-ON* */ } diff --git a/src/vnet/lisp-cp/one_cli.c b/src/vnet/lisp-cp/one_cli.c index b5bc5292fad..40f70e3da9e 100644 --- a/src/vnet/lisp-cp/one_cli.c +++ b/src/vnet/lisp-cp/one_cli.c @@ -1678,7 +1678,7 @@ lisp_show_stats_details_command_fn (vlib_main_t * vm, format_fid_address, &stat->deid, format_ip_address, &stat->loc_rloc, format_ip_address, &stat->rmt_rloc, - stat->stats.pkt_count, stat->stats.bytes); + stat->counters.packets, stat->counters.bytes); } vec_free (stats); return 0; -- cgit 1.2.3-korg