all repos — slstatus @ 67203c66600113259f4f25b1021c6395f3a62dd6

my build of slstatus (tools.suckless.org/slstatus/)

added ip address function
Aaron Marcher info@nulltime.net
Wed, 08 Jun 2016 09:42:32 +0200
commit

67203c66600113259f4f25b1021c6395f3a62dd6

parent

5a943fa59cab43f4a2cf6c133c4ef5676d6358b1

3 files changed, 47 insertions(+), 2 deletions(-)

jump to
M config.def.hconfig.def.h

@@ -17,6 +17,7 @@ - cpu_perc (cpu usage in percent) [argument: NULL]

- datetime (date and time) [argument: format] - disk_perc (disk usage in percent) [argument: mountpoint] - entropy (available entropy) [argument: NULL] +- ip (ip address) [argument: interface] - ram_perc (ram usage in percent) [argument: NULL] - temp (temperature in degrees) [argument: temperature file] - vol_perc (alsa volume and mute status in percent) [argument: soundcard]

@@ -30,6 +31,5 @@ { temp, "%3s | ", "/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input" },

{ ram_perc, "ram %3s | ", NULL }, { vol_perc, "vol %4s | ", "default" }, { disk_perc, "ssd %3s | ", "/" }, - { entropy, "crypt %s | ", NULL }, { datetime, "%s", "%y-%m-%d %H:%M:%S" }, };
M slstatus.cslstatus.c

@@ -2,8 +2,11 @@ /* See LICENSE file for copyright and license details. */

/* global libraries */ #include <alsa/asoundlib.h> +#include <arpa/inet.h> #include <fcntl.h> +#include <ifaddrs.h> #include <locale.h> +#include <netdb.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h>

@@ -11,6 +14,7 @@ #include <string.h>

#include <sys/types.h> #include <sys/stat.h> #include <sys/statvfs.h> +#include <sys/socket.h> #include <time.h> #include <unistd.h> #include <X11/Xlib.h>

@@ -204,6 +208,47 @@ /* return entropy */

return smprintf("%d", entropy); } +/* ip address */ +char * +ip(const char *interface) +{ + struct ifaddrs *ifaddr, *ifa; + int s; + char host[NI_MAXHOST]; + + /* check if getting ip address works */ + if (getifaddrs(&ifaddr) == -1) + { + fprintf(stderr, "Error getting IP address."); + return smprintf("n/a"); + } + + /* get the ip address */ + for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) + { + if (ifa->ifa_addr == NULL) + continue; + + s = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); + + if ((strcmp(ifa->ifa_name, interface) == 0) && (ifa->ifa_addr->sa_family == AF_INET)) + { + if (s != 0) + { + fprintf(stderr, "Error getting IP address."); + return smprintf("n/a"); + } + return smprintf("%s", host); + } + } + + /* free the address */ + freeifaddrs(ifaddr); + + /* return n/a if nothing works */ + return smprintf("n/a"); +} + /* ram percentage */ char * ram_perc(const char *null)

@@ -256,7 +301,6 @@

/* return temperature in degrees */ return smprintf("%d°C", temperature / 1000); } - /* alsa volume percentage */ char *
M slstatus.hslstatus.h

@@ -19,6 +19,7 @@ char *cpu_perc(const char *);

char *datetime(const char *); char *disk_perc(const char *); char *entropy(const char*); +char *ip(const char *); char *ram_perc(const char *); char *temp(const char *); char *vol_perc(const char *);