implemented openbsd netspeed functions implemented the netspeed functionality for openbsd. furthermore the static keyword was removed of the interval variable in config.def.h for usage as extern variable.
Tobias Tschinkowitz he4d@posteo.de
Sat, 19 May 2018 01:29:20 +0200
2 files changed,
60 insertions(+),
2 deletions(-)
M
components/netspeeds.c
→
components/netspeeds.c
@@ -49,5 +49,63 @@
return fmt_scaled((txbytes - oldtxbytes) / interval * 1000); } #elif defined(__OpenBSD__) - /* unimplemented */ + #include <string.h> + #include <ifaddrs.h> + #include <sys/types.h> + #include <sys/socket.h> + #include <net/if.h> + + const char * + netspeed_rx(const char *interface) + { + struct ifaddrs *ifal, *ifa; + struct if_data *ifd; + static uint64_t oldrxbytes; + uint64_t rxbytes = 0; + const char *rxs; + extern const unsigned int interval; + + if (getifaddrs(&ifal) == -1) { + warn("getifaddrs failed"); + return NULL; + } + for (ifa = ifal; ifa; ifa = ifa->ifa_next) { + if (!strcmp(ifa->ifa_name, interface) && + (ifd = (struct if_data *)ifa->ifa_data)) { + rxbytes += ifd->ifi_ibytes; + } + } + freeifaddrs(ifal); + + rxs = oldrxbytes ? fmt_scaled((rxbytes - oldrxbytes) / + interval * 1000) : NULL; + return (oldrxbytes = rxbytes, rxs); + } + + const char * + netspeed_tx(const char *interface) + { + struct ifaddrs *ifal, *ifa; + struct if_data *ifd; + static uint64_t oldtxbytes; + uint64_t txbytes = 0; + const char *txs; + extern const unsigned int interval; + + if (getifaddrs(&ifal) == -1) { + warn("getifaddrs failed"); + return NULL; + } + for (ifa = ifal; ifa; ifa = ifa->ifa_next) { + if (!strcmp(ifa->ifa_name, interface) && + (ifd = (struct if_data *)ifa->ifa_data)) { + txbytes += ifd->ifi_obytes; + } + } + freeifaddrs(ifal); + + txs = oldtxbytes ? fmt_scaled((txbytes - oldtxbytes) / + interval * 1000) : NULL; + return (oldtxbytes = txbytes, txs); + } #endif
M
config.def.h
→
config.def.h
@@ -1,7 +1,7 @@
/* See LICENSE file for copyright and license details. */ /* interval between updates (in ms) */ -static const unsigned int interval = 1000; +const unsigned int interval = 1000; /* text to show if no value can be retrieved */ static const char unknown_str[] = "n/a";