X-Git-Url: https://git.xinqibao.xyz/slstatus.git/blobdiff_plain/0d05b3d13d42f8bebc74bb5f6da7e5e10c0e9933..0383146e5e616e81c13b23a127ecfa697feac7db:/components/netspeeds.c diff --git a/components/netspeeds.c b/components/netspeeds.c index ef8bf93..9315fef 100644 --- a/components/netspeeds.c +++ b/components/netspeeds.c @@ -49,5 +49,63 @@ return fmt_scaled((txbytes - oldtxbytes) / interval * 1000); } #elif defined(__OpenBSD__) - /* unimplemented */ + #include + #include + #include + #include + #include + + 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