More sensible name, and try to set PMTU discovery on IPv6 sockets as well.
authorGuus Sliepen <guus@tinc-vpn.org>
Sat, 20 Dec 2003 21:09:33 +0000 (21:09 +0000)
committerGuus Sliepen <guus@tinc-vpn.org>
Sat, 20 Dec 2003 21:09:33 +0000 (21:09 +0000)
src/graph.c
src/net_packet.c
src/net_setup.c
src/net_socket.c
src/protocol_auth.c

index d07dd681b7b17e62a0dc971c3093398b479e2ac3..c177347060786fdcc1f8ef574d7d3edc409c6c1b 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: graph.c,v 1.1.2.31 2003/12/20 19:47:52 guus Exp $
+    $Id: graph.c,v 1.1.2.32 2003/12/20 21:09:33 guus Exp $
 */
 
 /* We need to generate two trees from the graph:
@@ -231,7 +231,9 @@ void sssp_bfs(void)
                                        avl_insert_node(node_udp_tree, node);
 
                                        if(e->to->options & OPTION_DONTFRAGMENT) {
+                                               e->to->mtu = MTU;
                                                e->to->mtuprobes = 0;
+                                               e->to->probedmtu = 0;
                                                if(e->to->status.validkey)
                                                        send_mtu_probe(e->to);
                                        }
index ac4ad42770061f4a5e331a6f375e5f3cee1f1ba2..d2e9aa816c846a589fa575d1bf996a238b8b0623 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: net_packet.c,v 1.1.2.45 2003/12/20 19:47:52 guus Exp $
+    $Id: net_packet.c,v 1.1.2.46 2003/12/20 21:09:33 guus Exp $
 */
 
 #include "system.h"
@@ -65,8 +65,13 @@ void send_mtu_probe(node_t *n)
 
        n->mtuprobes++;
 
+       if(n->mtuprobes >= 10 && !n->probedmtu) {
+               ifdebug(TRAFFIC) logger(LOG_INFO, _("No response to MTU probes from %s (%s)"), n->name, n->hostname);
+               return;
+       }
+
        for(i = 0; i < 3; i++) {
-               if(n->mtuprobes >= 100 || n->probedmtu >= n->mtu) {
+               if(n->mtuprobes >= 30 || n->probedmtu >= n->mtu) {
                        n->mtu = n->probedmtu;
                        ifdebug(TRAFFIC) logger(LOG_INFO, _("Fixing MTU of %s (%s) to %d after %d probes"), n->name, n->hostname, n->mtu, n->mtuprobes);
                        return;
index e71d4466dddd6fdd246e0cce6147e539d53e0298..b28413564ddc0b3a7ad3bade8dad1bc9b3b774c8 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: net_setup.c,v 1.1.2.48 2003/12/20 19:47:52 guus Exp $
+    $Id: net_setup.c,v 1.1.2.49 2003/12/20 21:09:33 guus Exp $
 */
 
 #include "system.h"
@@ -284,7 +284,7 @@ bool setup_myself(void)
        if(get_config_bool(lookup_config(myself->connection->config_tree, "TCPOnly"), &choice) && choice)
                myself->options |= OPTION_TCPONLY;
 
-       if(get_config_bool(lookup_config(myself->connection->config_tree, "DontFragment"), &choice) && choice)
+       if(get_config_bool(lookup_config(myself->connection->config_tree, "PMTUDiscovery"), &choice) && choice)
                myself->options |= OPTION_DONTFRAGMENT;
 
        if(myself->options & OPTION_TCPONLY)
index f740431459410234309eafe7a0d1a1954af06b35..b90dcf540b08f604b4862061b8c6ffb531fd47af 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: net_socket.c,v 1.1.2.36 2003/12/20 19:47:52 guus Exp $
+    $Id: net_socket.c,v 1.1.2.37 2003/12/20 21:09:33 guus Exp $
 */
 
 #include "system.h"
@@ -163,11 +163,26 @@ int setup_vpn_in_socket(const sockaddr_t *sa)
        {
                bool choice;
 
-               if(get_config_bool(lookup_config(myself->connection->config_tree, "DontFragment"), &choice) && choice) {
+               if(sa->sa.sa_family == AF_INET && get_config_bool(lookup_config(myself->connection->config_tree, "PMTUDiscovery"), &choice) && choice) {
                        option = IP_PMTUDISC_DO;
                        if(setsockopt(nfd, SOL_IP, IP_MTU_DISCOVER, &option, sizeof(option))) {
                                closesocket(nfd);
-                               logger(LOG_ERR, _("Can't set MTU discovery mode: %s"), strerror(errno));
+                               logger(LOG_ERR, _("Can't set PMTU discovery mode: %s"), strerror(errno));
+                               return -1;
+                       }
+               }
+       }
+#endif
+
+#if defined(SOL_IPV6) && defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DO)
+       {
+               bool choice;
+
+               if(sa->sa.sa_family == AF_INET6 && get_config_bool(lookup_config(myself->connection->config_tree, "PMTUDiscovery"), &choice) && choice) {
+                       option = IPV6_PMTUDISC_DO;
+                       if(setsockopt(nfd, SOL_IPV6, IPV6_MTU_DISCOVER, &option, sizeof(option))) {
+                               closesocket(nfd);
+                               logger(LOG_ERR, _("Can't set PMTU discovery mode: %s"), strerror(errno));
                                return -1;
                        }
                }
index b50e60db2ecd484c6ccac834163609deaa800de4..5e960ea5fc53e199b8610ab1c4a7babf3a9a9569 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: protocol_auth.c,v 1.1.4.31 2003/12/20 19:47:52 guus Exp $
+    $Id: protocol_auth.c,v 1.1.4.32 2003/12/20 21:09:33 guus Exp $
 */
 
 #include "system.h"
@@ -476,7 +476,7 @@ bool send_ack(connection_t *c)
        if((get_config_bool(lookup_config(c->config_tree, "TCPOnly"), &choice) && choice) || myself->options & OPTION_TCPONLY)
                c->options |= OPTION_TCPONLY | OPTION_INDIRECT;
 
-       if((get_config_bool(lookup_config(c->config_tree, "DontFragment"), &choice) && choice) || myself->options & OPTION_DONTFRAGMENT)
+       if((get_config_bool(lookup_config(c->config_tree, "PMTUDiscovery"), &choice) && choice) || myself->options & OPTION_DONTFRAGMENT)
                c->options |= OPTION_DONTFRAGMENT;
 
        return send_request(c, "%d %s %d %lx", ACK, myport, c->estimated_weight, c->options);