So apprently I've been doing this wrong for years - on glibc at
least, getifaddrs(3) never reported a hardware address for
AF_PACKET addresses. Infact, it reported nothing but useless
stats in ifa_data.
I view this as a bug because SIOCGIFHWADDR will get a sockaddr
with a sa_family set correctly. getifaddrs should do the same.
Anyway, if we have the ioctl and no address for the AF_PACKET
"address", call upon the above ioctl to get the correct family
for the interface.
While here, replace if_nametoindex with an ioctl to save libc
from doing it for us.