diff options
-rw-r--r-- | lib/socket/interfaces.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/socket/interfaces.c b/lib/socket/interfaces.c index 618714d1a7..9bdecb243d 100644 --- a/lib/socket/interfaces.c +++ b/lib/socket/interfaces.c @@ -195,6 +195,19 @@ static int _get_interfaces(TALLOC_CTX *mem_ctx, struct iface_struct **pifaces) memcpy(&ifaces[total].bcast, ifptr->ifa_dstaddr, copy_size); +#if defined(HAVE_IPV6) + } else if (ifptr->ifa_addr->sa_family == AF_INET6) { + const struct sockaddr_in6 *sin6 = + (const struct sockaddr_in6 *)ifptr->ifa_addr; + const struct in6_addr *in6 = + (const struct in6_addr *)&sin6->sin6_addr; + + if (IN6_IS_ADDR_LINKLOCAL(in6) || IN6_IS_ADDR_V4COMPAT(in6)) { + continue; + } + /* IPv6 does not have broadcast it uses multicast. */ + memset(&ifaces[total].bcast, '\0', copy_size); +#endif } else { continue; } |