- switch (ifa->ifa_addr->sa_family) {
- case AF_INET:
- s4 = (struct sockaddr_in *) ifa->ifa_addr;
- p = inet_ntop (AF_INET,
- &s4->sin_addr, ip, sizeof (ip));
- s4_mask = (struct sockaddr_in *) ifa->ifa_netmask;
- net_addr.s_addr = (in_addr_t) s4->sin_addr.s_addr &
- (in_addr_t) s4_mask->sin_addr.s_addr;
- q = inet_ntop (AF_INET, &net_addr, net, sizeof (net));
- break;
- case AF_INET6:
- s6 = (struct sockaddr_in6 *) ifa->ifa_addr;
- p = inet_ntop (AF_INET6,
- &s6->sin6_addr, ip, sizeof (ip));
- s6_mask = (struct sockaddr_in6 *) ifa->ifa_netmask;
- /* FIXME: Is this the right way to calculate this? */
- /* FIXME: Does this work on big endian machines? */
- for (i = 0; i < 16; ++i) {
- net6_addr.s6_addr[i] =
- s6->sin6_addr.s6_addr[i] &
- s6_mask->sin6_addr.s6_addr[i];
- }
- q = inet_ntop (AF_INET6, &net6_addr, net, sizeof (net));
- break;
- default:
- continue; /* Unknown: ignore */