Split into multiple files

For multiple reasons the program is now split:
- Make future porting to OpenBSD easier
- Assign header includes to individiual functions
- Make future program extensions easier
- Recompile only changed parts
This commit is contained in:
Aaron Marcher
2017-09-17 16:18:17 +02:00
parent 8e25af7dc3
commit 6820631175
22 changed files with 826 additions and 740 deletions

69
ip.c Normal file
View File

@ -0,0 +1,69 @@
#include <err.h>
#include <ifaddrs.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include "util.h"
const char *
ipv4(const char *iface)
{
struct ifaddrs *ifaddr, *ifa;
int s;
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) == -1) {
warn("Failed to get IPv4 address for interface %s", iface);
return NULL;
}
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, iface) == 0) && (ifa->ifa_addr->sa_family == AF_INET)) {
if (s != 0) {
warnx("Failed to get IPv4 address for interface %s", iface);
return NULL;
}
return bprintf("%s", host);
}
}
freeifaddrs(ifaddr);
return NULL;
}
const char *
ipv6(const char *iface)
{
struct ifaddrs *ifaddr, *ifa;
int s;
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) == -1) {
warn("Failed to get IPv6 address for interface %s", iface);
return NULL;
}
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
if (ifa->ifa_addr == NULL) {
continue;
}
s = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
if ((strcmp(ifa->ifa_name, iface) == 0) && (ifa->ifa_addr->sa_family == AF_INET6)) {
if (s != 0) {
warnx("Failed to get IPv6 address for interface %s", iface);
return NULL;
}
return bprintf("%s", host);
}
}
freeifaddrs(ifaddr);
return NULL;
}