vmxnet3: support clear hardware interface counters
[vpp.git] / src / plugins / vmxnet3 / format.c
index 8ee812e..eb213c9 100644 (file)
 u8 *
 format_vmxnet3_device_name (u8 * s, va_list * args)
 {
+  vlib_main_t *vm = vlib_get_main ();
   u32 i = va_arg (*args, u32);
   vmxnet3_main_t *vmxm = &vmxnet3_main;
   vmxnet3_device_t *vd = vec_elt_at_index (vmxm->devices, i);
-  vlib_pci_addr_t *addr = vlib_pci_get_addr (vd->pci_dev_handle);
+  vlib_pci_addr_t *addr = vlib_pci_get_addr (vm, vd->pci_dev_handle);
 
   s = format (s, "vmxnet3-%x/%x/%x/%x",
              addr->domain, addr->bus, addr->slot, addr->function);
@@ -62,6 +63,7 @@ format_vmxnet3_device (u8 * s, va_list * args)
   vmxnet3_txq_t *txq = vec_elt_at_index (vd->txqs, 0);
 
   s = format (s, "flags: %U", format_vmxnet3_device_flags, vd);
+  s = format (s, "\n%Uspeed %u", format_white_space, indent, vd->link_speed);
   s = format (s, "\n%Urx queues %u, rx desc %u, tx queues %u, tx desc %u",
              format_white_space, indent,
              vd->num_rx_queues, rxq->size, vd->num_tx_queues, txq->size);
@@ -73,47 +75,67 @@ format_vmxnet3_device (u8 * s, va_list * args)
 
   s = format (s, "\n%UTX:", format_white_space, indent);
   s = format (s, "\n%U  TSO packets                         %llu",
-             format_white_space, indent, q->tx.stats.tso_pkts);
+             format_white_space, indent,
+             q->tx.stats.tso_pkts - vd->tx_stats.tso_pkts);
   s = format (s, "\n%U  TSO bytes                           %llu",
-             format_white_space, indent, q->tx.stats.tso_bytes);
+             format_white_space, indent,
+             q->tx.stats.tso_bytes - vd->tx_stats.tso_bytes);
   s = format (s, "\n%U  ucast packets                       %llu",
-             format_white_space, indent, q->tx.stats.ucast_pkts);
+             format_white_space, indent,
+             q->tx.stats.ucast_pkts - vd->tx_stats.ucast_pkts);
   s = format (s, "\n%U  ucast bytes                         %llu",
-             format_white_space, indent, q->tx.stats.ucast_bytes);
+             format_white_space, indent,
+             q->tx.stats.ucast_bytes - vd->tx_stats.ucast_bytes);
   s = format (s, "\n%U  mcast packets                       %llu",
-             format_white_space, indent, q->tx.stats.mcast_pkts);
+             format_white_space, indent,
+             q->tx.stats.mcast_pkts - vd->tx_stats.mcast_pkts);
   s = format (s, "\n%U  mcast bytes                         %llu",
-             format_white_space, indent, q->tx.stats.mcast_bytes);
+             format_white_space, indent,
+             q->tx.stats.mcast_bytes - vd->tx_stats.mcast_bytes);
   s = format (s, "\n%U  bcast packets                       %llu",
-             format_white_space, indent, q->tx.stats.bcast_pkts);
+             format_white_space, indent,
+             q->tx.stats.bcast_pkts - vd->tx_stats.bcast_pkts);
   s = format (s, "\n%U  bcast bytes                         %llu",
-             format_white_space, indent, q->tx.stats.bcast_bytes);
+             format_white_space, indent,
+             q->tx.stats.bcast_bytes - vd->tx_stats.bcast_bytes);
   s = format (s, "\n%U  Errors packets                      %llu",
-             format_white_space, indent, q->tx.stats.error_pkts);
+             format_white_space, indent,
+             q->tx.stats.error_pkts - vd->tx_stats.error_pkts);
   s = format (s, "\n%U  Discard packets                     %llu",
-             format_white_space, indent, q->tx.stats.discard_pkts);
+             format_white_space, indent,
+             q->tx.stats.discard_pkts - vd->tx_stats.discard_pkts);
 
   s = format (s, "\n%URX:", format_white_space, indent);
   s = format (s, "\n%U  LRO packets                         %llu",
-             format_white_space, indent, q->rx.stats.lro_pkts);
+             format_white_space, indent,
+             q->rx.stats.lro_pkts - vd->rx_stats.lro_pkts);
   s = format (s, "\n%U  LRO bytes                           %llu",
-             format_white_space, indent, q->rx.stats.lro_bytes);
+             format_white_space, indent,
+             q->rx.stats.lro_bytes - vd->rx_stats.lro_bytes);
   s = format (s, "\n%U  ucast packets                       %llu",
-             format_white_space, indent, q->rx.stats.ucast_pkts);
+             format_white_space, indent,
+             q->rx.stats.ucast_pkts - vd->rx_stats.ucast_pkts);
   s = format (s, "\n%U  ucast bytes                         %llu",
-             format_white_space, indent, q->rx.stats.ucast_bytes);
+             format_white_space, indent,
+             q->rx.stats.ucast_bytes - vd->rx_stats.ucast_bytes);
   s = format (s, "\n%U  mcast packets                       %llu",
-             format_white_space, indent, q->rx.stats.mcast_pkts);
+             format_white_space, indent,
+             q->rx.stats.mcast_pkts - vd->rx_stats.mcast_pkts);
   s = format (s, "\n%U  mcast bytes                         %llu",
-             format_white_space, indent, q->rx.stats.mcast_bytes);
+             format_white_space, indent,
+             q->rx.stats.mcast_bytes - vd->rx_stats.mcast_bytes);
   s = format (s, "\n%U  bcast packets                       %llu",
-             format_white_space, indent, q->rx.stats.bcast_pkts);
+             format_white_space, indent,
+             q->rx.stats.bcast_pkts - vd->rx_stats.bcast_pkts);
   s = format (s, "\n%U  bcast bytes                         %llu",
-             format_white_space, indent, q->rx.stats.bcast_bytes);
+             format_white_space, indent,
+             q->rx.stats.bcast_bytes - vd->rx_stats.bcast_bytes);
   s = format (s, "\n%U  No Bufs                             %llu",
-             format_white_space, indent, q->rx.stats.nobuf_pkts);
+             format_white_space, indent,
+             q->rx.stats.nobuf_pkts - vd->rx_stats.nobuf_pkts);
   s = format (s, "\n%U  Error packets                       %llu",
-             format_white_space, indent, q->rx.stats.error_pkts);
+             format_white_space, indent,
+             q->rx.stats.error_pkts - vd->rx_stats.error_pkts);
   return s;
 }