add support for bge network interface metrics

This commit is contained in:
Doug MacEachern 2005-10-09 01:14:34 +00:00
parent 15d139a8a5
commit 3382767c07
1 changed files with 70 additions and 3 deletions

View File

@ -1874,6 +1874,75 @@ static void ifstat_kstat_common(sigar_net_interface_stat_t *ifstat,
}
}
/*
http://cvs.opensolaris.org/source/xref/usr/src/uts/common/io/bge/bge_kstats.c
*/
static void ifstat_kstat_bge(sigar_net_interface_stat_t *ifstat,
kstat_named_t *data, int ndata)
{
int i;
for (i=0; i<ndata; i++) {
sigar_uint64_t value = data[i].value.ui32;
char *ptr = data[i].name;
switch (*ptr) {
case 'd':
if (strEQ(ptr, "dot3StatsFrameTooLongs")) {
ifstat->rx_frame = value;
}
else if (strEQ(ptr, "dot3StatsCarrierSenseErrors")) {
ifstat->tx_carrier = value;
}
break;
case 'e':
if (strEQ(ptr, "etherStatsCollisions")) {
ifstat->tx_collisions = value;
}
else if (strEQ(ptr, "etherStatsUndersizePkts")) {
ifstat->rx_overruns = ifstat->tx_overruns =
value;
}
break;
case 'i':
if (strEQ(ptr, "ifHCInOctets")) {
ifstat->rx_bytes = value;
}
else if (strEQ(ptr, "ifHCOutOctets")) {
ifstat->tx_bytes = value;
}
else if (strEQ(ptr, "ifHCInUcastPkts") ||
strEQ(ptr, "ifHCInMulticastPkts") ||
strEQ(ptr, "ifHCInBroadcastPkts"))
{
ifstat->rx_packets += value;
}
else if (strEQ(ptr, "ifHCOutUcastPkts") ||
strEQ(ptr, "ifHCOutMulticastPkts") ||
strEQ(ptr, "ifHCOutBroadcastPkts"))
{
ifstat->tx_packets += value;
}
else if (strEQ(ptr, "ifInDiscards")) {
ifstat->rx_dropped = value;
}
else if (strEQ(ptr, "ifOutDiscards")) {
ifstat->tx_dropped = value;
}
else if (strEQ(ptr, "ifInErrors")) {
ifstat->rx_errors = value;
}
else if (strEQ(ptr, "ifOutErrors")) {
ifstat->tx_errors = value;
}
break;
default:
break;
}
}
}
static int sigar_net_ifstat_get_any(sigar_t *sigar, const char *name,
sigar_net_interface_stat_t *ifstat)
{
@ -1911,10 +1980,8 @@ static int sigar_net_ifstat_get_any(sigar_t *sigar, const char *name,
data = (kstat_named_t *)ksp->ks_data;
/* http://cvs.opensolaris.org/source/xref/usr/src/uts/common/io/bge */
if (strEQ(dev, "bge")) {
/* XXX totally different names */
/* ifstat_kstat_bge(ifstat, data, ksp->ks_ndata); */
ifstat_kstat_bge(ifstat, data, ksp->ks_ndata);
}
else {
ifstat_kstat_common(ifstat, data, ksp->ks_ndata);