aboutsummaryrefslogtreecommitdiffstats
path: root/src/vpp/stats/stats.c
diff options
context:
space:
mode:
authorNeale Ranns <nranns@cisco.com>2018-03-29 01:28:09 -0700
committerDave Barach <openvpp@barachs.net>2018-04-04 13:40:39 +0000
commit871dc4287d8c05ff76106dba4f5f8654c24347fe (patch)
tree97f6026e284f8cb570855f47512b22a0b58112d1 /src/vpp/stats/stats.c
parent6df19030f2bf986f1876c2c46b44c046b9b2c686 (diff)
Detailed stats collection feature
Use device-input and interface-output feautre arcs to collect unicast, multicast and broadcast states for RX and TX resp. Since these feature arcs are present only for 'physical' interfaces (i.e. not su-interfaces) counter collection is supported only on parent interface types. Change-Id: I915c235e336b0fc3a3c3de918f95dd674e4e0e4e Signed-off-by: Neale Ranns <nranns@cisco.com> Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
Diffstat (limited to 'src/vpp/stats/stats.c')
-rw-r--r--src/vpp/stats/stats.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/vpp/stats/stats.c b/src/vpp/stats/stats.c
index 3fe03e4ec0f..5787b9e14e9 100644
--- a/src/vpp/stats/stats.c
+++ b/src/vpp/stats/stats.c
@@ -848,18 +848,26 @@ do_combined_per_interface_counters (stats_main_t * sm)
vp->sw_if_index = htonl (reg->item);
im = &vnet_get_main ()->interface_main;
- cm = im->combined_sw_if_counters + VNET_INTERFACE_COUNTER_RX;
- vlib_get_combined_counter (cm, reg->item, &v);
- clib_mem_unaligned (&vp->rx_packets, u64) =
- clib_host_to_net_u64 (v.packets);
- clib_mem_unaligned (&vp->rx_bytes, u64) =
- clib_host_to_net_u64 (v.bytes);
- cm = im->combined_sw_if_counters + VNET_INTERFACE_COUNTER_TX;
- vlib_get_combined_counter (cm, reg->item, &v);
- clib_mem_unaligned (&vp->tx_packets, u64) =
- clib_host_to_net_u64 (v.packets);
- clib_mem_unaligned (&vp->tx_bytes, u64) =
- clib_host_to_net_u64 (v.bytes);
+
+#define _(X, x) \
+ cm = im->combined_sw_if_counters + X; \
+ vlib_get_combined_counter (cm, reg->item, &v); \
+ clib_mem_unaligned (&vp->x##_packets, u64) = \
+ clib_host_to_net_u64 (v.packets); \
+ clib_mem_unaligned (&vp->x##_bytes, u64) = \
+ clib_host_to_net_u64 (v.bytes);
+
+
+ _(VNET_INTERFACE_COUNTER_RX, rx);
+ _(VNET_INTERFACE_COUNTER_TX, tx);
+ _(VNET_INTERFACE_COUNTER_RX_UNICAST, rx_unicast);
+ _(VNET_INTERFACE_COUNTER_TX_UNICAST, tx_unicast);
+ _(VNET_INTERFACE_COUNTER_RX_MULTICAST, rx_multicast);
+ _(VNET_INTERFACE_COUNTER_TX_MULTICAST, tx_multicast);
+ _(VNET_INTERFACE_COUNTER_RX_BROADCAST, rx_broadcast);
+ _(VNET_INTERFACE_COUNTER_TX_BROADCAST, tx_broadcast);
+
+#undef _
vl_api_send_msg (vl_reg, (u8 *) mp);
}