BSD IPv6 multicast fix by John Hay
authorHenning Rogge <hrogge@googlemail.com>
Wed, 25 Mar 2009 19:53:33 +0000 (20:53 +0100)
committerHenning Rogge <hrogge@googlemail.com>
Wed, 25 Mar 2009 19:53:33 +0000 (20:53 +0100)
src/bsd/net.c

index 3066431..78874a5 100644 (file)
@@ -471,6 +471,9 @@ join_mcast(struct interface *ifs, int sock)
   /* See netinet6/in6.h */
   struct ipaddr_str addrstr;
   struct ipv6_mreq mcastreq;
+#ifdef IPV6_USE_MIN_MTU
+  int on;
+#endif
 
   mcastreq.ipv6mr_multiaddr = ifs->int6_multaddr.sin6_addr;
   mcastreq.ipv6mr_interface = ifs->if_index;
@@ -508,6 +511,19 @@ join_mcast(struct interface *ifs, int sock)
     OLSR_WARN(LOG_NETWORKING, "Cannot set multicast interface (%s)\n", strerror(errno));
     return -1;
   }
+
+#ifdef IPV6_USE_MIN_MTU
+  /*
+   * This allow multicast packets to use the full interface MTU and not
+   * be limited to 1280 bytes.
+   */
+  on = 0;
+  if (setsockopt(sock, IPPROTO_IPV6, IPV6_USE_MIN_MTU, (char *)&on, sizeof(on)) < 0) {
+    perror("IPV6_USE_MIN_MTU failed");
+    close(sock);
+    return -1;
+  }
+#endif
   return 0;
 }