Xinqi Bao's Git
1 /* See LICENSE file for copyright and license details. */
6 #if defined(__OpenBSD__)
8 #include <sys/socket.h>
14 ip(const char *interface
, unsigned short sa_family
)
16 struct ifaddrs
*ifaddr
, *ifa
;
18 char host
[NI_MAXHOST
];
20 if (getifaddrs(&ifaddr
) < 0) {
25 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
29 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in6
),
30 host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
31 if (!strcmp(ifa
->ifa_name
, interface
) &&
32 (ifa
->ifa_addr
->sa_family
== sa_family
)) {
35 warn("getnameinfo: %s", gai_strerror(s
));
38 return bprintf("%s", host
);
48 ipv4(const char *interface
)
50 return ip(interface
, AF_INET
);
54 ipv6(const char *interface
)
56 return ip(interface
, AF_INET6
);