diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/avf/avf.h | 6 | ||||
-rw-r--r-- | src/plugins/avf/device.c | 19 | ||||
-rw-r--r-- | src/plugins/avf/format.c | 19 |
3 files changed, 38 insertions, 6 deletions
diff --git a/src/plugins/avf/avf.h b/src/plugins/avf/avf.h index c03a7c252ae..10297e6f0ce 100644 --- a/src/plugins/avf/avf.h +++ b/src/plugins/avf/avf.h @@ -85,6 +85,7 @@ extern vlib_log_class_registration_t avf_log; +extern vlib_log_class_registration_t avf_stats_log; #define avf_log_err(dev, f, ...) \ vlib_log (VLIB_LOG_LEVEL_ERR, avf_log.class, "%U: " f, \ @@ -101,6 +102,10 @@ extern vlib_log_class_registration_t avf_log; format_vlib_pci_addr, &dev->pci_addr, \ ## __VA_ARGS__) +#define avf_stats_log_debug(dev, f, ...) \ + vlib_log (VLIB_LOG_LEVEL_DEBUG, avf_stats_log.class, "%U: " f, \ + format_vlib_pci_addr, &dev->pci_addr, ##__VA_ARGS__) + #define foreach_avf_device_flags \ _ (0, INITIALIZED, "initialized") \ _ (1, ERROR, "error") \ @@ -356,6 +361,7 @@ format_function_t format_avf_vf_cap_flags; format_function_t format_avf_vlan_supported_caps; format_function_t format_avf_vlan_caps; format_function_t format_avf_vlan_support; +format_function_t format_avf_eth_stats; vnet_flow_dev_ops_function_t avf_flow_ops_fn; static_always_inline avf_device_t * diff --git a/src/plugins/avf/device.c b/src/plugins/avf/device.c index 28fe0a42f08..09dafa3d1e5 100644 --- a/src/plugins/avf/device.c +++ b/src/plugins/avf/device.c @@ -36,11 +36,14 @@ #define PCI_DEVICE_ID_INTEL_X710_VF 0x154c #define PCI_DEVICE_ID_INTEL_X722_VF 0x37cd -/* *INDENT-OFF* */ VLIB_REGISTER_LOG_CLASS (avf_log) = { .class_name = "avf", }; -/* *INDENT-ON* */ + +VLIB_REGISTER_LOG_CLASS (avf_stats_log) = { + .class_name = "avf", + .subclass_name = "stats", +}; avf_main_t avf_main; void avf_delete_if (vlib_main_t * vm, avf_device_t * ad, int with_barrier); @@ -815,13 +818,17 @@ avf_op_get_stats (vlib_main_t * vm, avf_device_t * ad, virtchnl_eth_stats_t * es) { virtchnl_queue_select_t qs = { 0 }; + clib_error_t *err; qs.vsi_id = ad->vsi_id; - avf_log_debug (ad, "get_stats: vsi_id %u", ad->vsi_id); + err = avf_send_to_pf (vm, ad, VIRTCHNL_OP_GET_STATS, &qs, + sizeof (virtchnl_queue_select_t), es, + sizeof (virtchnl_eth_stats_t)); - return avf_send_to_pf (vm, ad, VIRTCHNL_OP_GET_STATS, - &qs, sizeof (virtchnl_queue_select_t), - es, sizeof (virtchnl_eth_stats_t)); + avf_stats_log_debug (ad, "get_stats: vsi_id %u\n %U", ad->vsi_id, + format_avf_eth_stats, es); + + return err; } clib_error_t * diff --git a/src/plugins/avf/format.c b/src/plugins/avf/format.c index 26157804c77..0a153a093d9 100644 --- a/src/plugins/avf/format.c +++ b/src/plugins/avf/format.c @@ -239,3 +239,22 @@ format_avf_vlan_caps (u8 *s, va_list *args) vc->offloads.ethertype_match); return s; } + +u8 * +format_avf_eth_stats (u8 *s, va_list *args) +{ + virtchnl_eth_stats_t *es = va_arg (*args, virtchnl_eth_stats_t *); + u32 indent = format_get_indent (s); + u8 *v = 0; + +#define _(st) \ + if (v) \ + v = format (v, "\n%U", format_white_space, indent); \ + v = format (v, "%-20s = %lu", #st, es->st); + foreach_virtchnl_eth_stats +#undef _ + + s = format (s, "%v", v); + vec_free (v); + return s; +} |