Xinqi Bao's Git
1 /* See LICENSE file for copyright and license details. */
7 #if defined(__OpenBSD__)
9 #include <sys/socket.h>
15 ipv4(const char *iface
)
17 struct ifaddrs
*ifaddr
, *ifa
;
19 char host
[NI_MAXHOST
];
21 if (getifaddrs(&ifaddr
) < 0) {
22 fprintf(stderr
, "getifaddrs: %s\n", strerror(errno
));
26 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
30 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in
), host
,
31 NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
32 if (!strcmp(ifa
->ifa_name
, iface
) &&
33 (ifa
->ifa_addr
->sa_family
== AF_INET
)) {
35 fprintf(stderr
, "getnameinfo: %s\n", gai_strerror(s
));
38 return bprintf("%s", host
);
48 ipv6(const char *iface
)
50 struct ifaddrs
*ifaddr
, *ifa
;
52 char host
[NI_MAXHOST
];
54 if (getifaddrs(&ifaddr
) < 0) {
55 fprintf(stderr
, "getifaddrs: %s\n", strerror(errno
));
59 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
63 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in6
), host
,
64 NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
65 if (!strcmp(ifa
->ifa_name
, iface
) &&
66 (ifa
->ifa_addr
->sa_family
== AF_INET6
)) {
68 fprintf(stderr
, "getnameinfo: %s\n", gai_strerror(s
));
71 return bprintf("%s", host
);