]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2863. [port] linux: disable IPv6 PMTUD and use network minimum MTU.
authorMark Andrews <marka@isc.org>
Thu, 11 Mar 2010 04:43:57 +0000 (04:43 +0000)
committerMark Andrews <marka@isc.org>
Thu, 11 Mar 2010 04:43:57 +0000 (04:43 +0000)
                        [RT #21056]

CHANGES
lib/isc/unix/socket.c

diff --git a/CHANGES b/CHANGES
index e5ff99eab8c589ac4278d5f5c8915b77bd4e5cd0..02c30926576c1fb2f1c24ffe86177cded87d66b9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2863.  [port]          linux: disable IPv6 PMTUD and use network minimum MTU.
+                       [RT #21056]
+
 2862.  [bug]           nsupdate didn't default to the parent zone when
                        updating DS records. [RT #20896]
 
index d3b2e96591a55d311f3a793ba9f4e975366b000f..91bb5b3766c217306e328cf4e49862e171e676f5 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: socket.c,v 1.328 2010/01/31 23:49:09 tbox Exp $ */
+/* $Id: socket.c,v 1.329 2010/03/11 04:43:57 marka Exp $ */
 
 /*! \file */
 
@@ -2396,6 +2396,26 @@ opensocket(isc__socketmgr_t *manager, isc__socket_t *sock) {
                                         (void *)&on, sizeof(on));
                }
 #endif
+#if defined(IPV6_MTU)
+               /*
+                * Use minimum MTU on IPv6 sockets.
+                */
+               if (sock->pf == AF_INET6) {
+                       int mtu = 1280;
+                       (void)setsockopt(sock->fd, IPPROTO_IPV6, IPV6_MTU,
+                                        &mtu, sizeof(mtu));
+               }
+#endif
+#if defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DONT)
+               /*
+                * Turn off Path MTU discovery on IPv6/UDP sockets.
+                */
+               if (sock->pf == AF_INET6) {
+                       int action = IPV6_PMTUDISC_DONT;
+                       (void)setsockopt(sock->fd, IPPROTO_IPV6, IPV6_MTU_DISCOVER,
+                                        &action, sizeof(action));
+               }
+#endif
 #endif /* ISC_PLATFORM_HAVEIPV6 */
 #endif /* defined(USE_CMSG) */