diff options
author | Aaron Marcher <me@drkhsh.at> | 2018-05-19 00:31:33 +0200 |
---|---|---|
committer | Aaron Marcher <me@drkhsh.at> | 2018-05-19 00:31:33 +0200 |
commit | 0d05b3d13d42f8bebc74bb5f6da7e5e10c0e9933 (patch) | |
tree | a53f70563de9c04bd486d6f1c9bfec78001bc513 /components/netspeeds.c | |
parent | d0c68989cd9f42f2b79da3a2ebe9d4765b28bfc1 (diff) |
Add network speed functions
Diffstat (limited to 'components/netspeeds.c')
-rw-r--r-- | components/netspeeds.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/components/netspeeds.c b/components/netspeeds.c new file mode 100644 index 0000000..ef8bf93 --- /dev/null +++ b/components/netspeeds.c @@ -0,0 +1,53 @@ +/* See LICENSE file for copyright and license details. */ +#include <stdio.h> +#include <limits.h> + +#include "../util.h" + +#if defined(__linux__) + const char * + netspeed_rx(const char *interface) + { + static int valid; + static unsigned long long rxbytes; + unsigned long oldrxbytes; + extern const unsigned int interval; + char path[PATH_MAX]; + + oldrxbytes = rxbytes; + snprintf(path, sizeof(path), "/sys/class/net/%s/statistics/rx_bytes", interface); + if (pscanf(path, "%llu", &rxbytes) != 1) { + return NULL; + } + if (!valid) { + valid = 1; + return NULL; + } + + return fmt_scaled((rxbytes - oldrxbytes) / interval * 1000); + } + + const char * + netspeed_tx(const char *interface) + { + static int valid; + static unsigned long long txbytes; + unsigned long oldtxbytes; + extern const unsigned int interval; + char path[PATH_MAX]; + + oldtxbytes = txbytes; + snprintf(path, sizeof(path), "/sys/class/net/%s/statistics/tx_bytes", interface); + if (pscanf(path, "%llu", &txbytes) != 1) { + return NULL; + } + if (!valid) { + valid = 1; + return NULL; + } + + return fmt_scaled((txbytes - oldtxbytes) / interval * 1000); + } +#elif defined(__OpenBSD__) + /* unimplemented */ +#endif |