all repos — slstatus @ 22175f0d5792f1d046b6b501c694a3afabc877ed

my build of slstatus (tools.suckless.org/slstatus/)

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
commit

22175f0d5792f1d046b6b501c694a3afabc877ed

parent

176d8ff87418a22240a0b079d7dac593d103e984

2 files changed, 60 insertions(+), 2 deletions(-)

jump to
M components/netspeeds.ccomponents/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.hconfig.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";