From 9bab08e972ae0ca4b904a659d9aed46aaa9b5dd5 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sat, 20 Dec 2003 21:09:33 +0000 Subject: [PATCH] More sensible name, and try to set PMTU discovery on IPv6 sockets as well. --- src/graph.c | 4 +++- src/net_packet.c | 9 +++++++-- src/net_setup.c | 4 ++-- src/net_socket.c | 21 ++++++++++++++++++--- src/protocol_auth.c | 4 ++-- 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/graph.c b/src/graph.c index d07dd681..c1773470 100644 --- a/src/graph.c +++ b/src/graph.c @@ -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); } diff --git a/src/net_packet.c b/src/net_packet.c index ac4ad427..d2e9aa81 100644 --- a/src/net_packet.c +++ b/src/net_packet.c @@ -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; diff --git a/src/net_setup.c b/src/net_setup.c index e71d4466..b2841356 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -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) diff --git a/src/net_socket.c b/src/net_socket.c index f7404314..b90dcf54 100644 --- a/src/net_socket.c +++ b/src/net_socket.c @@ -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; } } diff --git a/src/protocol_auth.c b/src/protocol_auth.c index b50e60db..5e960ea5 100644 --- a/src/protocol_auth.c +++ b/src/protocol_auth.c @@ -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); -- 2.20.1