Xinqi Bao's Git
1 /* See LICENSE file for copyright and license details. */
2 #if defined(__OpenBSD__)
4 #include <sys/socket.h>
16 ipv4(const char *iface
)
18 struct ifaddrs
*ifaddr
, *ifa
;
20 char host
[NI_MAXHOST
];
22 if (getifaddrs(&ifaddr
) == -1) {
23 fprintf(stderr
, "getifaddrs: %s\n", strerror(errno
));
27 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
28 if (ifa
->ifa_addr
== NULL
) {
31 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
32 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET
)) {
34 fprintf(stderr
, "getnameinfo: %s\n", gai_strerror(s
));
37 return bprintf("%s", host
);
47 ipv6(const char *iface
)
49 struct ifaddrs
*ifaddr
, *ifa
;
51 char host
[NI_MAXHOST
];
53 if (getifaddrs(&ifaddr
) == -1) {
54 fprintf(stderr
, "getifaddrs: %s\n", strerror(errno
));
58 for (ifa
= ifaddr
; ifa
!= NULL
; ifa
= ifa
->ifa_next
) {
59 if (ifa
->ifa_addr
== NULL
) {
62 s
= getnameinfo(ifa
->ifa_addr
, sizeof(struct sockaddr_in6
), host
, NI_MAXHOST
, NULL
, 0, NI_NUMERICHOST
);
63 if ((strcmp(ifa
->ifa_name
, iface
) == 0) && (ifa
->ifa_addr
->sa_family
== AF_INET6
)) {
65 fprintf(stderr
, "getnameinfo: %s\n", gai_strerror(s
));
68 return bprintf("%s", host
);