]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2444. [port] Linux, FreeBSD, AIX: Turn off path mtu discovery
authorMark Andrews <marka@isc.org>
Tue, 23 Sep 2008 02:46:01 +0000 (02:46 +0000)
committerMark Andrews <marka@isc.org>
Tue, 23 Sep 2008 02:46:01 +0000 (02:46 +0000)
                        (clear DF) for UDP responses and requests.

CHANGES
lib/isc/unix/socket.c

diff --git a/CHANGES b/CHANGES
index 8b90bcd3d7302b1d355a343e7d0dc9ce50be6c85..1f2830797ebc962daf170186c5c41a0fabd81069 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2444.  [port]          Linux, FreeBSD, AIX: Turn off path mtu discovery
+                       (clear DF) for UDP responses and requests.
+
        --- 9.3.6b1 released ---
 
 2443.  [bug]           win32: UDP connect() would not generate an event,
index 1b15751c1b4f9d18abcae5156c2d36836d7224d0..4edcde4661dcf38b0914f86db2f4528f4b5e6580 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: socket.c,v 1.207.2.19.2.55 2008/09/04 08:11:25 marka Exp $ */
+/* $Id: socket.c,v 1.207.2.19.2.56 2008/09/23 02:46:01 marka Exp $ */
 
 #include <config.h>
 
@@ -1976,6 +1976,27 @@ opensocket(isc_socketmgr_t *manager, isc_socket_t *sock) {
 #endif
 #endif /* ISC_PLATFORM_HAVEIPV6 */
 #endif /* defined(USE_CMSG) */
+  
+#if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT)
+               /*
+                * Turn off Path MTU discovery on IPv4/UDP sockets.
+                */
+               if (sock->pf == AF_INET) {
+                       int action = IP_PMTUDISC_DONT;
+                       (void)setsockopt(sock->fd, IPPROTO_IP, IP_MTU_DISCOVER,
+                                        &action, sizeof(action));
+               }
+#endif
+#if defined(IP_DONTFRAG)
+               /*
+                * Turn off Path MTU discovery on IPv4/UDP sockets.
+                */
+               if (sock->pf == AF_INET) {
+                       int off = 0;
+                       (void)setsockopt(sock->fd, IPPROTO_IP, IP_DONTFRAG,
+                                        &off, sizeof(off));
+               }
+#endif
        }
 #endif /* defined(USE_CMSG) || defined(SO_RCVBUF) */