Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Feb 2015 20:08:06 +0000 (UTC)
From:      Hiren Panchasara <hiren@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r278168 - stable/10/contrib/ntp/ntpd
Message-ID:  <201502032008.t13K862Y045943@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hiren
Date: Tue Feb  3 20:08:05 2015
New Revision: 278168
URL: https://svnweb.freebsd.org/changeset/base/278168

Log:
  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.

Modified:
  stable/10/contrib/ntp/ntpd/ntp_io.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/contrib/ntp/ntpd/ntp_io.c
==============================================================================
--- stable/10/contrib/ntp/ntpd/ntp_io.c	Tue Feb  3 20:06:30 2015	(r278167)
+++ stable/10/contrib/ntp/ntpd/ntp_io.c	Tue Feb  3 20:08:05 2015	(r278168)
@@ -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 *na
 	}
 	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 */
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201502032008.t13K862Y045943>