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();