|
|
@@ -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 |