IP addresses structure big enough for an IPv6 address by default (minimum size == sizeof(struct sockaddr_in6)). Compatible with all of struct sockaddr, struct sockaddr_in, and struct sockaddr_in6. If used to represent an IPv4 or IPv6 address, (&(s->sin_addr) == &(s->sin6_addr) == &(s->sa_pad)) . If used to represent an AF_LLC address (ethernet), &(((ip_addr_t*)s)->sa_data) == &(((struct sockaddr*)s)->sa_data).