summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorhiren <hiren@FreeBSD.org>2015-02-03 20:08:05 +0000
committerhiren <hiren@FreeBSD.org>2015-02-03 20:08:05 +0000
commit38ccc08c23f4fd1545088356d077d5690f81ced6 (patch)
tree435290d5fc65f76eec62da1a7280e49d01f46b8a /contrib
parent64562d8152d305f9fd0d691ea8092514772118e1 (diff)
downloadFreeBSD-src-38ccc08c23f4fd1545088356d077d5690f81ced6.zip
FreeBSD-src-38ccc08c23f4fd1545088356d077d5690f81ced6.tar.gz
MFC r277202
ntpd tries to bind to IPv6 interfaces in 'tentative' state and fails as IPv6 is actually disabled. Fix it by making ntpd ignore such interfaces.
Diffstat (limited to 'contrib')
-rw-r--r--contrib/ntp/ntpd/ntp_io.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/contrib/ntp/ntpd/ntp_io.c b/contrib/ntp/ntpd/ntp_io.c
index c53c686..44e7f80 100644
--- a/contrib/ntp/ntpd/ntp_io.c
+++ b/contrib/ntp/ntpd/ntp_io.c
@@ -1176,12 +1176,13 @@ set_wildcard_reuse(int family, int on)
#ifdef INCLUDE_IPV6_SUPPORT
static isc_boolean_t
-is_anycast(struct sockaddr *sa, char *name)
+is_not_bindable(struct sockaddr *sa, char *name)
{
-#if defined(SIOCGIFAFLAG_IN6) && defined(IN6_IFF_ANYCAST)
+#if defined(SIOCGIFAFLAG_IN6) && \
+ (defined(IN6_IFF_ANYCAST) || defined(IN6_IFF_NOTREADY))
struct in6_ifreq ifr6;
int fd;
- u_int32_t flags6;
+ u_int32_t flags6, exclude = 0;
if (sa->sa_family != AF_INET6)
return ISC_FALSE;
@@ -1197,9 +1198,15 @@ is_anycast(struct sockaddr *sa, char *name)
}
close(fd);
flags6 = ifr6.ifr_ifru.ifru_flags6;
- if ((flags6 & IN6_IFF_ANYCAST) != 0)
+#if defined(IN6_IFF_ANYCAST)
+ exclude |= IN6_IFF_ANYCAST;
+#endif /* !IN6_IFF_ANYCAST */
+#if defined(IN6_IFF_NOTREADY)
+ exclude |= IN6_IFF_NOTREADY;
+#endif /* !IN6_IFF_NOTREADY */
+ if ((flags6 & exclude) != 0)
return ISC_TRUE;
-#endif /* !SIOCGIFAFLAG_IN6 || !IN6_IFF_ANYCAST */
+#endif /* !SIOCGIFAFLAG_IN6 || !(IN6_IFF_ANYCAST && IN6_IFF_NOTREADY) */
return ISC_FALSE;
}
#endif /* !INCLUDE_IPV6_SUPPORT */
@@ -1344,7 +1351,7 @@ update_interfaces(
continue;
#ifdef INCLUDE_IPV6_SUPPORT
- if (is_anycast((struct sockaddr *)&interface.sin, isc_if.name))
+ if (is_not_bindable((struct sockaddr *)&interface.sin, isc_if.name))
continue;
#endif /* !INCLUDE_IPV6_SUPPORT */
OpenPOWER on IntegriCloud