Author: bz
Date: Sun May 29 07:40:48 2011
New Revision: 222444
URL: http://svn.freebsd.org/changeset/base/222444

Log:
  The argument to setsockopt for IP_MULTICAST_LOOP depends on operating
  system and is decided upon by configure and could be an u_int or a
  u_char.  For FreeBSD it is a u_char.
  
  For IPv6 however RFC 3493, 5.2 defines the argument to
  IPV6_MULTICAST_LOOP to be an unsigned integer so make sure we always
  use that using a second variable for the IPV6 case.
  This is to get rid of these error messages every 5 minutes on some
  systems:
  ntpd[1530]: setsockopt IPV6_MULTICAST_LOOP failure: Invalid argument
    on socket 22, addr fe80::... for multicast address ff02::101
  
  While here also fix the copy&paste error in the log message for
  IPV6_MULTICAST_LOOP.
  
  Reviewed by:  roberto
  Sponsored by: The FreeBSD Foundation
  Sponsored by: iXsystems
  MFC after:    10 days
  Filed as:     Bug 1936 on ntp.org

Modified:
  head/contrib/ntp/ntpd/ntp_io.c

Modified: head/contrib/ntp/ntpd/ntp_io.c
==============================================================================
--- head/contrib/ntp/ntpd/ntp_io.c      Sun May 29 05:45:56 2011        
(r222443)
+++ head/contrib/ntp/ntpd/ntp_io.c      Sun May 29 07:40:48 2011        
(r222444)
@@ -1753,7 +1753,12 @@ void
 enable_multicast_if(struct interface *iface, struct sockaddr_storage *maddr)
 {
 #ifdef MCAST
+#ifdef IP_MULTICAST_LOOP
        /*u_char*/ TYPEOF_IP_MULTICAST_LOOP off = 0;
+#endif
+#ifdef IPV6_MULTICAST_LOOP
+       u_int off6 = 0;         /* RFC 3493, 5.2. defines type unsigned int */
+#endif
 
        switch (maddr->ss_family)
        {
@@ -1797,9 +1802,9 @@ enable_multicast_if(struct interface *if
                 * Don't send back to itself, but allow it to fail to set it
                 */
                if (setsockopt(iface->fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP,
-                      (char *) &off, sizeof(off)) == -1) {
+                      (char *) &off6, sizeof(off6)) == -1) {
                        netsyslog(LOG_ERR,
-                       "setsockopt IP_MULTICAST_LOOP failure: %m on socket %d, 
addr %s for multicast address %s",
+                       "setsockopt IPV6_MULTICAST_LOOP failure: %m on socket 
%d, addr %s for multicast address %s",
                        iface->fd, stoa(&iface->sin), stoa(maddr));
                }
 #endif
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to