Blob Blame History Raw
Backported from ntp-dev-4.2.7p399

diff -up ntp-4.2.6p5/ntpd/ntp_io.c.refreshroute ntp-4.2.6p5/ntpd/ntp_io.c
--- ntp-4.2.6p5/ntpd/ntp_io.c.refreshroute	2013-10-17 13:48:34.808727175 +0200
+++ ntp-4.2.6p5/ntpd/ntp_io.c	2013-12-09 14:02:28.076249785 +0100
@@ -1785,7 +1785,6 @@ update_interfaces(
 	isc_result_t		result;
 	isc_interface_t		isc_if;
 	int			new_interface_found;
-	int			refresh_peers;
 	unsigned int		family;
 	endpt			enumep;
 	endpt *			ep;
@@ -1800,7 +1799,6 @@ update_interfaces(
 	 */
 
 	new_interface_found = FALSE;
-	refresh_peers = FALSE;
 	iter = NULL;
 	result = isc_interfaceiter_create(mctx, &iter);
 
@@ -1836,6 +1834,8 @@ update_interfaces(
 
 		convert_isc_if(&isc_if, &enumep, port);
 
+		DPRINT_INTERFACE(4, (&enumep, "examining ", "\n"));
+
 		/* 
 		 * Check if and how we are going to use the interface.
 		 */
@@ -1843,19 +1843,23 @@ update_interfaces(
 					 enumep.flags)) {
 
 		case ACTION_IGNORE:
+			DPRINTF(4, ("ignoring interface %s (%s) - by nic rules\n",
+				    enumep.name, stoa(&enumep.sin)));
 			continue;
 
 		case ACTION_LISTEN:
+			DPRINTF(4, ("listen interface %s (%s) - by nic rules\n",
+				    enumep.name, stoa(&enumep.sin)));
 			enumep.ignore_packets = ISC_FALSE;
 			break;
 
 		case ACTION_DROP:
+			DPRINTF(4, ("drop on interface %s (%s) - by nic rules\n",
+				    enumep.name, stoa(&enumep.sin)));
 			enumep.ignore_packets = ISC_TRUE;
 			break;
 		}
 
-		DPRINT_INTERFACE(4, (&enumep, "examining ", "\n"));
-
 		 /* interfaces must be UP to be usable */
 		if (!(enumep.flags & INT_UP)) {
 			DPRINTF(4, ("skipping interface %s (%s) - DOWN\n",
@@ -1898,15 +1902,8 @@ update_interfaces(
 				 */
 				strncpy(ep->name, enumep.name,
 					sizeof(ep->name));
-				if (ep->ignore_packets !=
-				    enumep.ignore_packets) {
-					ep->ignore_packets = 
+				ep->ignore_packets = 
 					    enumep.ignore_packets;
-					refresh_peers = TRUE;
-					DPRINTF(4, ("refreshing peers due to %s ignore_packets change to %d\n",
-					    stoa(&ep->sin),
-					    ep->ignore_packets));
-				}
 			} else {
 				/* name collision - rename interface */
 				strncpy(ep->name, "*multiple*",
@@ -1971,9 +1968,6 @@ update_interfaces(
 					(*receiver)(data, &ifi);
 
 				new_interface_found = TRUE;
-				refresh_peers = TRUE;
-				DPRINTF(4, ("refreshing peers due to new addr %s\n",
-					stoa(&ep->sin)));
 				DPRINT_INTERFACE(3,
 					(ep, "updating ",
 					 " new - created\n"));
@@ -2013,9 +2007,6 @@ update_interfaces(
 		DPRINT_INTERFACE(3, (ep, "updating ",
 				     "GONE - deleting\n"));
 		remove_interface(ep);
-		refresh_peers = TRUE;
-		DPRINTF(4, ("refreshing peers due to deleted addr %s",
-			    stoa(&ep->sin)));
 
 		ifi.action = IFS_DELETED;
 		ifi.ep = ep;
@@ -2037,12 +2028,12 @@ update_interfaces(
 	}
 
 	/*
-	 * phase 3 - re-configure as the world has changed if necessary
+	 * phase 3 - re-configure as the world has possibly changed
+	 *
+	 * never ever make this conditional again - it is needed to track
+	 * routing updates. see bug #2506
 	 */
-	if (refresh_peers) {
-		refresh_all_peerinterfaces();
-		msyslog(LOG_INFO, "peers refreshed");
-	}
+	refresh_all_peerinterfaces();
 
 	if (sys_bclient)
 		io_setbclient();