Blame SOURCES/ntp-4.2.6p5-mcastjoin.patch

2b78f7
diff -up ntp-4.2.6p5/ntpd/ntp_io.c.mcastjoin ntp-4.2.6p5/ntpd/ntp_io.c
2b78f7
--- ntp-4.2.6p5/ntpd/ntp_io.c.mcastjoin	2015-04-13 14:41:59.108323479 +0200
2b78f7
+++ ntp-4.2.6p5/ntpd/ntp_io.c	2015-04-13 14:43:46.468637433 +0200
2b78f7
@@ -2038,6 +2038,32 @@ update_interfaces(
2b78f7
 	if (sys_bclient)
2b78f7
 		io_setbclient();
2b78f7
 
2b78f7
+	/*
2b78f7
+	 * Check multicast interfaces and try to join multicast groups if
2b78f7
+	 * not joined yet.
2b78f7
+	 */
2b78f7
+	for (ep = ep_list; ep != NULL; ep = ep->elink) {
2b78f7
+		remaddr_t *entry;
2b78f7
+
2b78f7
+		if (!(INT_MCASTIF & ep->flags) || (INT_MCASTOPEN & ep->flags))
2b78f7
+			continue;
2b78f7
+
2b78f7
+		/* Find remote address that was linked to this interface */
2b78f7
+		for (entry = remoteaddr_list;
2b78f7
+		     entry != NULL;
2b78f7
+		     entry = entry->link) {
2b78f7
+			if (entry->ep == ep) {
2b78f7
+				if (socket_multicast_enable(ep, &entry->addr)) {
2b78f7
+					msyslog(LOG_INFO,
2b78f7
+						"Joined %s socket to multicast group %s",
2b78f7
+						stoa(&ep->sin),
2b78f7
+						stoa(&entry->addr));
2b78f7
+				}
2b78f7
+				break;
2b78f7
+			}
2b78f7
+		}
2b78f7
+	}
2b78f7
+
2b78f7
 	return new_interface_found;
2b78f7
 }
2b78f7
 
2b78f7
@@ -2467,12 +2493,12 @@ socket_multicast_enable(
2b78f7
 			       IP_ADD_MEMBERSHIP,
2b78f7
 			       (char *)&mreq, 
2b78f7
 			       sizeof(mreq))) {
2b78f7
-			msyslog(LOG_ERR,
2b78f7
+			DPRINTF(2, (
2b78f7
 				"setsockopt IP_ADD_MEMBERSHIP failed: %m on socket %d, addr %s for %x / %x (%s)",
2b78f7
 				iface->fd, stoa(&iface->sin),
2b78f7
 				mreq.imr_multiaddr.s_addr,
2b78f7
 				mreq.imr_interface.s_addr,
2b78f7
-				stoa(maddr));
2b78f7
+				stoa(maddr)));
2b78f7
 			return ISC_FALSE;
2b78f7
 		}
2b78f7
 		DPRINTF(4, ("Added IPv4 multicast membership on socket %d, addr %s for %x / %x (%s)\n",
2b78f7
@@ -2497,10 +2523,10 @@ socket_multicast_enable(
2b78f7
 		if (setsockopt(iface->fd, IPPROTO_IPV6,
2b78f7
 			       IPV6_JOIN_GROUP, (char *)&mreq6, 
2b78f7
 			       sizeof(mreq6))) {
2b78f7
-			msyslog(LOG_ERR,
2b78f7
+			DPRINTF(2, (
2b78f7
 				"setsockopt IPV6_JOIN_GROUP failed: %m on socket %d, addr %s for interface %u (%s)",
2b78f7
 				iface->fd, stoa(&iface->sin),
2b78f7
-				mreq6.ipv6mr_interface, stoa(maddr));
2b78f7
+				mreq6.ipv6mr_interface, stoa(maddr)));
2b78f7
 			return ISC_FALSE;
2b78f7
 		}
2b78f7
 		DPRINTF(4, ("Added IPv6 multicast group on socket %d, addr %s for interface %u (%s)\n",
2b78f7
@@ -2793,11 +2819,6 @@ io_multicast_add(
2b78f7
 				"Joined %s socket to multicast group %s",
2b78f7
 				stoa(&ep->sin),
2b78f7
 				stoa(addr));
2b78f7
-		else
2b78f7
-			msyslog(LOG_ERR,
2b78f7
-				"Failed to join %s socket to multicast group %s",
2b78f7
-				stoa(&ep->sin),
2b78f7
-				stoa(addr));
2b78f7
 	}
2b78f7
 
2b78f7
 	add_addr_to_list(addr, one_ep);