avf: fix clear hw stats 09/20309/2
authorFilip Tehlar <ftehlar@cisco.com>
Thu, 20 Jun 2019 23:53:43 +0000 (23:53 +0000)
committerNeale Ranns <nranns@cisco.com>
Tue, 25 Jun 2019 09:40:46 +0000 (09:40 +0000)
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>
src/plugins/avf/avf.h
src/plugins/avf/device.c
src/plugins/avf/format.c

index 2efdfcd..4994074 100644 (file)
@@ -180,6 +180,7 @@ typedef struct
 
   /* stats */
   virtchnl_eth_stats_t eth_stats;
+  virtchnl_eth_stats_t last_cleared_eth_stats;
 
   /* error */
   clib_error_t *error;
index aab8164..d595da2 100644 (file)
@@ -1516,10 +1516,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,
index 4c391a8..4def8b5 100644 (file)
@@ -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)