[hackers] [slstatus] implemented openbsd netspeed functions || Tobias Tschinkowitz

From: <git_AT_suckless.org>
Date: Sat, 19 May 2018 01:57:11 +0200 (CEST)

commit 22175f0d5792f1d046b6b501c694a3afabc877ed
Author: Tobias Tschinkowitz <he4d_AT_posteo.de>
AuthorDate: Sat May 19 01:29:20 2018 +0200
Commit: Aaron Marcher <me_AT_drkhsh.at>
CommitDate: Sat May 19 01:44:36 2018 +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.

diff --git a/components/netspeeds.c b/components/netspeeds.c
index ef8bf93..9315fef 100644
--- a/components/netspeeds.c
+++ b/components/netspeeds.c
_AT_@ -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
index bf6aef9..49ea282 100644
--- a/config.def.h
+++ b/config.def.h
_AT_@ -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";
Received on Sat May 19 2018 - 01:57:11 CEST

This archive was generated by hypermail 2.3.0 : Sat May 19 2018 - 02:00:32 CEST