add 'up' for whether a interface is up or down - slstatus - status monitor | |
git clone git://git.suckless.org/slstatus | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit af508f0b4cf88b1921c59fdf5dd1a98c08223fa5 | |
parent b6267f7d0bedf5789206adf21f33cfe1a872289c | |
Author: sewn <[email protected]> | |
Date: Sat, 16 Mar 2024 00:20:54 +0300 | |
add 'up' for whether a interface is up or down | |
Diffstat: | |
M components/ip.c | 26 ++++++++++++++++++++++++++ | |
M config.def.h | 1 + | |
M slstatus.h | 1 + | |
3 files changed, 28 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/components/ip.c b/components/ip.c | |
@@ -1,6 +1,7 @@ | |
/* See LICENSE file for copyright and license details. */ | |
#include <ifaddrs.h> | |
#include <netdb.h> | |
+#include <net/if.h> | |
#include <stdio.h> | |
#include <string.h> | |
#if defined(__OpenBSD__) | |
@@ -59,3 +60,28 @@ ipv6(const char *interface) | |
{ | |
return ip(interface, AF_INET6); | |
} | |
+ | |
+const char * | |
+up(const char *interface) | |
+{ | |
+ struct ifaddrs *ifaddr, *ifa; | |
+ | |
+ if (getifaddrs(&ifaddr) < 0) { | |
+ warn("getifaddrs:"); | |
+ return NULL; | |
+ } | |
+ | |
+ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { | |
+ if (!ifa->ifa_addr) | |
+ continue; | |
+ | |
+ if (!strcmp(ifa->ifa_name, interface)) { | |
+ freeifaddrs(ifaddr); | |
+ return ifa->ifa_flags & IFF_UP ? "up" : "down"; | |
+ } | |
+ } | |
+ | |
+ freeifaddrs(ifaddr); | |
+ | |
+ return NULL; | |
+} | |
diff --git a/config.def.h b/config.def.h | |
@@ -56,6 +56,7 @@ static const char unknown_str[] = "n/a"; | |
* thermal zone on FreeBSD | |
* (tz0, tz1, etc.) | |
* uid UID of current user NULL | |
+ * up interface is running interface name (eth0) | |
* uptime system uptime NULL | |
* username username of current user NULL | |
* vol_perc OSS/ALSA volume in percent mixer file (/dev/mixer) | |
diff --git a/slstatus.h b/slstatus.h | |
@@ -30,6 +30,7 @@ const char *hostname(const char *unused); | |
/* ip */ | |
const char *ipv4(const char *interface); | |
const char *ipv6(const char *interface); | |
+const char *up(const char *interface); | |
/* kernel_release */ | |
const char *kernel_release(const char *unused); |