diff options
author | Pavel Kotucek <pkotucek@cisco.com> | 2016-03-03 13:27:11 +0100 |
---|---|---|
committer | Gerrit Code Review <gerrit@fd.io> | 2016-03-07 14:07:22 +0000 |
commit | 00bbf276be22fa0458366d4dd3f4daf4e55d13e7 (patch) | |
tree | 4c2afba9a866d6200362a26df8a5789471b340a0 /vpp/api/api.c | |
parent | 433688dbdcaa550f7cdb6314742fb46c0c95d5d8 (diff) |
Add sw_interface_clear_stats API call
Change-Id: I0731357744ddcb890efaebd81aac5370449a90e3
Signed-off-by: Pavel Kotucek <pkotucek@cisco.com>
Diffstat (limited to 'vpp/api/api.c')
-rw-r--r-- | vpp/api/api.c | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/vpp/api/api.c b/vpp/api/api.c index 2c0b4b3c..40cfa27b 100644 --- a/vpp/api/api.c +++ b/vpp/api/api.c @@ -311,7 +311,8 @@ _(MAP_RULE_DUMP, map_rule_dump) \ _(MAP_SUMMARY_STATS, map_summary_stats) \ _(COP_INTERFACE_ENABLE_DISABLE, cop_interface_enable_disable) \ _(COP_WHITELIST_ENABLE_DISABLE, cop_whitelist_enable_disable) \ -_(GET_NODE_GRAPH, get_node_graph) +_(GET_NODE_GRAPH, get_node_graph) \ +_(SW_INTERFACE_CLEAR_STATS, sw_interface_clear_stats) #define QUOTE_(x) #x #define QUOTE(x) QUOTE_(x) @@ -2351,6 +2352,64 @@ static void vl_api_sw_interface_set_flags_t_handler ( REPLY_MACRO(VL_API_SW_INTERFACE_SET_FLAGS_REPLY); } +static void vl_api_sw_interface_clear_stats_t_handler ( + vl_api_sw_interface_clear_stats_t * mp) +{ + vl_api_sw_interface_clear_stats_reply_t *rmp; + + vnet_main_t * vnm = vnet_get_main(); + vnet_interface_main_t * im = &vnm->interface_main; + vlib_simple_counter_main_t * sm; + vlib_combined_counter_main_t * cm; + static vnet_main_t ** my_vnet_mains; + int i, j, n_counters; + + int rv = 0; + + vec_reset_length (my_vnet_mains); + + for (i = 0; i < vec_len (vnet_mains); i++) + { + if (vnet_mains[i]) + vec_add1 (my_vnet_mains, vnet_mains[i]); + } + + if (vec_len (vnet_mains) == 0) + vec_add1 (my_vnet_mains, vnm); + + n_counters = vec_len (im->combined_sw_if_counters); + + for (j = 0; j < n_counters; j++) + { + for (i = 0; i < vec_len(my_vnet_mains); i++) + { + im = &my_vnet_mains[i]->interface_main; + cm = im->combined_sw_if_counters + j; + if (mp->sw_if_index == (u32)~0) + vlib_clear_combined_counters (cm); + else + vlib_zero_combined_counter (cm, ntohl(mp->sw_if_index)); + } + } + + n_counters = vec_len (im->sw_if_counters); + + for (j = 0; j < n_counters; j++) + { + for (i = 0; i < vec_len(my_vnet_mains); i++) + { + im = &my_vnet_mains[i]->interface_main; + sm = im->sw_if_counters + j; + if (mp->sw_if_index == (u32)~0) + vlib_clear_simple_counters (sm); + else + vlib_zero_simple_counter (sm, ntohl(mp->sw_if_index)); + } + } + + REPLY_MACRO(VL_API_SW_INTERFACE_CLEAR_STATS_REPLY); +} + static void send_sw_interface_details (vpe_api_main_t * am, unix_shared_memory_queue_t *q, vnet_sw_interface_t * swif, |