Apply IPv6 multicast MTU patch for BSD from John Hay
authorHenning Rogge <hrogge@googlemail.com>
Mon, 23 Mar 2009 19:49:42 +0000 (20:49 +0100)
committerHenning Rogge <hrogge@googlemail.com>
Mon, 23 Mar 2009 19:49:42 +0000 (20:49 +0100)
src/bsd/net.c

index 291789f..f7b5cec 100644 (file)
@@ -466,6 +466,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;
@@ -491,6 +494,19 @@ join_mcast(struct interface *ifs, int sock)
     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
+
   OLSR_PRINTF(3, "OK\n");
   return 0;
 }