--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/ntp/patches/70-refresh.patch Tue Jul 15 07:20:42 2014 -0700
@@ -0,0 +1,122 @@
+Patch to restore the period refreshing of the interface list
+and to re-resolve the peers source addresses. This is needed
+because the interfaces are not done coming online when ntpd
+starts due to delays from DAD.
+
+This patch can be removed when NTP is upgraded to 4.2.7p396
+or later
+
+
+--- ntpd/ntp_io.c
++++ ntpd/ntp_io.c
[email protected]@ -1704,7 +1704,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;
[email protected]@ -1719,7 +1718,6 @@ update_interfaces(
+ */
+
+ new_interface_found = FALSE;
+- refresh_peers = FALSE;
+ iter = NULL;
+ result = isc_interfaceiter_create(mctx, &iter);
+
[email protected]@ -1755,6 +1753,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.
+ */
[email protected]@ -1762,19 +1762,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",
[email protected]@ -1817,15 +1821,7 @@ update_interfaces(
+ */
+ strlcpy(ep->name, enumep.name,
+ sizeof(ep->name));
+- if (ep->ignore_packets !=
+- enumep.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));
+- }
++ ep->ignore_packets = enumep.ignore_packets;
+ } else {
+ /* name collision - rename interface */
+ strlcpy(ep->name, "*multiple*",
[email protected]@ -1890,9 +1886,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"));
[email protected]@ -1932,9 +1925,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\n",
+- stoa(&ep->sin)));
+
+ ifi.action = IFS_DELETED;
+ ifi.ep = ep;
[email protected]@ -1956,17 +1946,16 @@ update_interfaces(
+ }
+
+ /*
+- * phase 3 - re-configure as the world has changed if necessary
++ * phase 3 - re-configure as the world has probably changed
++ *
++ * never ever make this conditional again - it is needed to track
++ * routing updates. see bug #2506
+ */
++ refresh_all_peerinterfaces();
+
+ if (broadcast_client_enabled)
+ io_setbclient();
+
+- if (refresh_peers) {
+- refresh_all_peerinterfaces();
+- msyslog(LOG_INFO, "peers refreshed");
+- }
+-
+ return new_interface_found;
+ }
+