added ip address function
Aaron Marcher info@nulltime.net
Wed, 08 Jun 2016 09:42:32 +0200
3 files changed,
47 insertions(+),
2 deletions(-)
M
config.def.h
→
config.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.c
→
slstatus.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.h
→
slstatus.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 *);