commit 22175f0d5792f1d046b6b501c694a3afabc877ed
parent 176d8ff87418a22240a0b079d7dac593d103e984
Author: Tobias Tschinkowitz <he4d@posteo.de>
Date: Sat, 19 May 2018 01:29:20 +0200
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.
Diffstat:
2 files changed, 60 insertions(+), 2 deletions(-)
diff --git a/components/netspeeds.c b/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
diff --git a/config.def.h b/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";