netspeeds: added error condition for openbsd

implemented additional error condition for openbsd netstat in case the
interface could not be found in the interface list or if_data is not
readable.
This commit is contained in:
Tobias Tschinkowitz 2018-05-19 11:23:16 +02:00 committed by Aaron Marcher
parent 0383146e5e
commit 2321aecff0

View file

@ -64,6 +64,7 @@
uint64_t rxbytes = 0; uint64_t rxbytes = 0;
const char *rxs; const char *rxs;
extern const unsigned int interval; extern const unsigned int interval;
char if_ok = 0;
if (getifaddrs(&ifal) == -1) { if (getifaddrs(&ifal) == -1) {
warn("getifaddrs failed"); warn("getifaddrs failed");
@ -72,10 +73,14 @@
for (ifa = ifal; ifa; ifa = ifa->ifa_next) { for (ifa = ifal; ifa; ifa = ifa->ifa_next) {
if (!strcmp(ifa->ifa_name, interface) && if (!strcmp(ifa->ifa_name, interface) &&
(ifd = (struct if_data *)ifa->ifa_data)) { (ifd = (struct if_data *)ifa->ifa_data)) {
rxbytes += ifd->ifi_ibytes; rxbytes += ifd->ifi_ibytes, if_ok = 1;
} }
} }
freeifaddrs(ifal); freeifaddrs(ifal);
if (!if_ok) {
warn("reading 'if_data' failed");
return NULL;
}
rxs = oldrxbytes ? fmt_scaled((rxbytes - oldrxbytes) / rxs = oldrxbytes ? fmt_scaled((rxbytes - oldrxbytes) /
interval * 1000) : NULL; interval * 1000) : NULL;
@ -91,6 +96,7 @@
uint64_t txbytes = 0; uint64_t txbytes = 0;
const char *txs; const char *txs;
extern const unsigned int interval; extern const unsigned int interval;
char if_ok = 0;
if (getifaddrs(&ifal) == -1) { if (getifaddrs(&ifal) == -1) {
warn("getifaddrs failed"); warn("getifaddrs failed");
@ -99,10 +105,14 @@
for (ifa = ifal; ifa; ifa = ifa->ifa_next) { for (ifa = ifal; ifa; ifa = ifa->ifa_next) {
if (!strcmp(ifa->ifa_name, interface) && if (!strcmp(ifa->ifa_name, interface) &&
(ifd = (struct if_data *)ifa->ifa_data)) { (ifd = (struct if_data *)ifa->ifa_data)) {
txbytes += ifd->ifi_obytes; txbytes += ifd->ifi_obytes, if_ok = 1;
} }
} }
freeifaddrs(ifal); freeifaddrs(ifal);
if (!if_ok) {
warn("reading 'if_data' failed");
return NULL;
}
txs = oldtxbytes ? fmt_scaled((txbytes - oldtxbytes) / txs = oldtxbytes ? fmt_scaled((txbytes - oldtxbytes) /
interval * 1000) : NULL; interval * 1000) : NULL;