slstatus

status monitor
git clone git://git.suckless.org/slstatus
Log | Files | Refs | README | LICENSE

commit 0d05b3d13d42f8bebc74bb5f6da7e5e10c0e9933
parent d0c68989cd9f42f2b79da3a2ebe9d4765b28bfc1
Author: Aaron Marcher <me@drkhsh.at>
Date:   Sat, 19 May 2018 00:31:33 +0200

Add network speed functions

Diffstat:
MMakefile | 1+
MREADME | 1+
Acomponents/netspeeds.c | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Mslstatus.h | 4++++
4 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile @@ -16,6 +16,7 @@ COM =\ components/kernel_release\ components/keyboard_indicators\ components/load_avg\ + components/netspeeds\ components/num_files\ components/ram\ components/run_command\ diff --git a/README b/README @@ -19,6 +19,7 @@ Features - Kernel version - Keyboard indicators - Load average +- Network speeds (RX and TX) - Number of files in a directory (hint: Maildir) - Memory status (free memory, percentage, total memory and used memory) - Swap status (free swap, percentage, total swap and used swap) diff --git a/components/netspeeds.c 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 diff --git a/slstatus.h b/slstatus.h @@ -37,6 +37,10 @@ const char *keyboard_indicators(void); /* load_avg */ const char *load_avg(const char *); +/* netspeeds */ +const char *netspeed_rx(const char *); +const char *netspeed_tx(const char *); + /* num_files */ const char *num_files(const char *);