Xinqi Bao's Git
1 /* See LICENSE file for copyright and license details. */
6 #if defined(__OpenBSD__)
8 #include <sys/socket.h>
9 #elif defined(__FreeBSD__)
10 #include <netinet/in.h>
11 #include <sys/socket.h>
17 ip(const char *interface
, unsigned short sa_family
)
19 struct ifaddrs
*ifaddr
, *ifa
;
21 char host
[NI_MAXHOST
];
23 if (getifaddrs(&ifaddr
) < 0) {
28 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
32 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in6
),
33 host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
34 if (!strcmp(ifa
->ifa_name
, interface
) &&
35 (ifa
->ifa_addr
->sa_family
== sa_family
)) {
38 warn("getnameinfo: %s", gai_strerror(s
));
41 return bprintf("%s", host
);
51 ipv4(const char *interface
)
53 return ip(interface
, AF_INET
);
57 ipv6(const char *interface
)
59 return ip(interface
, AF_INET6
);