ifaddrs
struct ifaddrs *ifa, *ifaddrs = NULL;
if (getifaddrs(&ifaddrs) != 0) {
for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
freeifaddrs(ifaddrs);
check_ifaddrs(const char *ifname, int af, const struct ifaddrs *ifaddrs,
const struct ifaddrs *ifa;
for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
struct ifaddrs *ifaddrs = NULL;
if ((r = getifaddrs(&ifaddrs)) != 0) {
ifaddrs, &bindaddr, &bindaddrlen) != 0) {
if (ifaddrs != NULL)
freeifaddrs(ifaddrs);
struct ifaddrs *ifa_next;
int getifaddrs(struct ifaddrs **);
void freeifaddrs(struct ifaddrs *);
data = malloc(sizeof(struct ifaddrs) * icnt + dcnt + ncnt);
ifa = (struct ifaddrs *)(void *)data;
data += sizeof(struct ifaddrs) * icnt;
memset(ifa, 0, sizeof(struct ifaddrs) * icnt);
freeifaddrs(struct ifaddrs *ifp)
getifaddrs(struct ifaddrs **pif)
struct ifaddrs *cif = NULL;
struct ifaddrs *ifa, *ift;
struct ifaddrs *ifaddrs, *ifa;
if (getifaddrs(&ifaddrs) < 0)
for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
freeifaddrs(ifaddrs);
for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
freeifaddrs(ifaddrs);
struct ifaddrs *ifaddrs, *ifa;
if (getifaddrs(&ifaddrs) < 0)
for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
struct ifaddrs *ifaddrs, *ifa;
if (getifaddrs(&ifaddrs) < 0)
for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
freeifaddrs(ifaddrs);
struct ifaddrs *ifap, *ifp;
struct ifaddrs *ifap, *ifa;
struct ifaddrs *ifap, *ifa;
in_status(int s __unused, const struct ifaddrs *ifa)
struct ifaddrs *ifap, *ifa;
in6_status(int s __unused, const struct ifaddrs *ifa)
link_status(int s __unused, const struct ifaddrs *ifa)
struct ifaddrs *ifa;
static int calcorders(struct ifaddrs *ifa, struct ifa_queue *q);
static int cmpifaddrs(struct ifaddrs *a, struct ifaddrs *b,
typedef int (*ifaddrs_cmp)(struct ifaddrs *, struct ifaddrs *, struct ifa_queue *);
static struct ifaddrs *sortifaddrs(struct ifaddrs *list, ifaddrs_cmp compare,
struct ifaddrs *ifa)
struct ifaddrs *ift;
calcorders(struct ifaddrs *ifa, struct ifa_queue *q)
struct ifaddrs *prev;
cmpifaddrs(struct ifaddrs *a, struct ifaddrs *b, struct ifa_queue *q)
static struct ifaddrs *
sortifaddrs(struct ifaddrs *list, ifaddrs_cmp compare, struct ifa_queue *q)
struct ifaddrs *right, *temp, *last, *result, *next, *tail;
struct ifaddrs *ifap, *sifap, *ifa;
struct ifaddrs *ifa);
void (*af_status)(int, const struct ifaddrs *);
struct ifaddrs;
struct ifaddrs *ifap, *ifa;
struct ifaddrs *ifp, *p;
struct ifaddrs *ifap, *ifa;
struct ifaddrs *ifa, *ifap = NULL;
static void init_one(struct ifaddrs *, char *, int);
init_one(struct ifaddrs *ifa, char *target, int pass1)
struct ifaddrs *ifhead, *ifa;
struct ifaddrs *ifap, *ifa;
struct ifaddrs *ifap, *ifp = NULL, *bestif;
struct ifaddrs *ifap, *ifp;
struct ifaddrs *ifap, *ifa;
struct ifaddrs *ifap, *ifa;
struct ifaddrs *ifap, *ifa, *target;