add 'up' for whether a interface is up or down - slstatus - status monitor
 (HTM) git clone git://git.suckless.org/slstatus
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit af508f0b4cf88b1921c59fdf5dd1a98c08223fa5
 (DIR) parent b6267f7d0bedf5789206adf21f33cfe1a872289c
 (HTM) Author: sewn <sewn@disroot.org>
       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(-)
       ---
 (DIR) 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;
       +}
 (DIR) 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)
 (DIR) 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);