From abe5afc580dcaaab70f136904d98fa83bfae7b6e Mon Sep 17 00:00:00 2001 From: Matthieu Patou Date: Fri, 14 Oct 2011 13:45:48 -0700 Subject: Fix bug with Samba not recognising an 6to4 IPv6 interface. "The 6to4 interface has the flags IFF_POINTTOPOINT interface but no ifa_dstaddr as it's not at the IPv6 level a point to point interface (at least from my understanding), as we don't have a IFF_BROADCAST flag set (I have the impression that this flag is only set on a interface that has also an IPv4 address) the first test is not valid also, which result in a skipped interface." --- lib/socket/interfaces.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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; } -- cgit