diff options
author | Filip Tehlar <ftehlar@cisco.com> | 2019-06-20 23:53:43 +0000 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2019-06-26 16:25:21 +0000 |
commit | bf5049a3b21ea0f40b9efa428df4d0098d39a963 (patch) | |
tree | 22457024cb09c32130c3f72de420b4fbbe5cb122 /src/plugins/avf | |
parent | 2605526c9b5caaa900ad21132aa118fe48ea2136 (diff) |
avf: fix clear hw stats
AVF plugin is missing a handler for clearing stats. This patch will
implement it.
Ticket: VPP-1701
Type: fix
Change-Id: If4b4354da442065896bb001deda23f64ddc18fb4
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Diffstat (limited to 'src/plugins/avf')
-rw-r--r-- | src/plugins/avf/avf.h | 1 | ||||
-rw-r--r-- | src/plugins/avf/device.c | 10 | ||||
-rw-r--r-- | src/plugins/avf/format.c | 5 |
3 files changed, 14 insertions, 2 deletions
diff --git a/src/plugins/avf/avf.h b/src/plugins/avf/avf.h index 62fa9a6ecd9..b907e3ff2b6 100644 --- a/src/plugins/avf/avf.h +++ b/src/plugins/avf/avf.h @@ -164,6 +164,7 @@ typedef struct /* stats */ virtchnl_eth_stats_t eth_stats; + virtchnl_eth_stats_t last_cleared_eth_stats; /* error */ clib_error_t *error; diff --git a/src/plugins/avf/device.c b/src/plugins/avf/device.c index 2a86bed4a7a..5fd1d6cd8db 100644 --- a/src/plugins/avf/device.c +++ b/src/plugins/avf/device.c @@ -1416,10 +1416,20 @@ static char *avf_tx_func_error_strings[] = { #undef _ }; +static void +avf_clear_hw_interface_counters (u32 instance) +{ + avf_main_t *am = &avf_main; + avf_device_t *ad = vec_elt_at_index (am->devices, instance); + clib_memcpy_fast (&ad->last_cleared_eth_stats, + &ad->eth_stats, sizeof (ad->eth_stats)); +} + /* *INDENT-OFF* */ VNET_DEVICE_CLASS (avf_device_class,) = { .name = "Adaptive Virtual Function (AVF) interface", + .clear_counters = avf_clear_hw_interface_counters, .format_device = format_avf_device, .format_device_name = format_avf_device_name, .admin_up_down_function = avf_interface_admin_up_down, diff --git a/src/plugins/avf/format.c b/src/plugins/avf/format.c index 4c391a80760..4def8b5ea32 100644 --- a/src/plugins/avf/format.c +++ b/src/plugins/avf/format.c @@ -107,9 +107,10 @@ format_avf_device (u8 * s, va_list * args) s = format (s, "\n%Uerror %U", format_white_space, indent, format_clib_error, ad->error); -#define _(c) if (ad->eth_stats.c) \ +#define _(c) if (ad->eth_stats.c - ad->last_cleared_eth_stats.c) \ a = format (a, "\n%U%-20U %u", format_white_space, indent + 2, \ - format_c_identifier, #c, ad->eth_stats.c); + format_c_identifier, #c, \ + ad->eth_stats.c - ad->last_cleared_eth_stats.c); foreach_virtchnl_eth_stats; #undef _ if (a) |