Description
Currently, there are two variants of struct ifaddrs
in libc: one matching Linux with an ifa_ifu
field and an OS X variant with only ifa_dstaddr
. However, some other BSD derivates define ifa_broadaddr
as well, which isn't currently covered (and I guess the fields would be misaligned on systems having ifa_broadaddr
as a separate field in the struct).
Googling for getifaddr
man pages, I found these different definitions:
Variant 1: union:
http://man7.org/linux/man-pages/man3/getifaddrs.3.html (Linux)
https://docs.oracle.com/cd/E26502_01/html/E29035/getifaddrs-3socket.html (Solaris 11)
Variant 2: only ifa_dstaddr
, no ifa_broadaddr
(or possibly a macro on ifa_dstaddr
):
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/getifaddrs.3.html (OS X)
Variant 3: separate fields ifa_dstraddr
and ifa_broadaddr
:
http://netbsd.gw.com/cgi-bin/man-cgi?getifaddrs+3+NetBSD-current (NetBSD)
https://www.freebsd.org/cgi/man.cgi?getifaddrs (FreeBSD)
https://man.openbsd.org/getifaddrs.3 (OpenBSD)
Based on these findings, I suppose struct ifaddr
in src/unix/bsd/mod.rs
would have to move down to the variant-specific fiels under apple
, freebsdlike
and netbsdlike
to adjust for this difference. And the Solaris variant should probably simply be changed to use ifa_ifu
. Any other platform that needs to be supported and checked?