From 62ab3ccd3d51c739014e425fdfc21c29ef734d60 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Tue, 3 Dec 2013 11:53:53 +0000 Subject: [PATCH] Only set scope_id in addresses to bind() for linklocal addresses. FreeBSD complains otherwise. --- src/network.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/network.c b/src/network.c index f2d2819..361abb3 100644 --- a/src/network.c +++ b/src/network.c @@ -484,8 +484,12 @@ static int iface_allowed_v6(struct in6_addr *local, int prefix, addr.in6.sin6_family = AF_INET6; addr.in6.sin6_addr = *local; addr.in6.sin6_port = htons(daemon->port); - addr.in6.sin6_scope_id = if_index; - + /* FreeBSD insists this is zero for non-linklocal addresses */ + if (IN6_IS_ADDR_LINKLOCAL(local)) + addr.in6.sin6_scope_id = if_index; + else + addr.in6.sin6_scope_id = 0; + return iface_allowed((struct iface_param *)vparam, if_index, NULL, &addr, netmask, prefix, !!(flags & IFACE_TENTATIVE)); } #endif