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