From 0538c5261d7db6a5022dce87852ebb6b7ec876f4 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Sat, 21 Sep 2019 19:25:56 +0200 Subject: [PATCH] Disable PMTU in other platforms --- edge.c | 8 +------- edge_utils.c | 19 +++++++++---------- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/edge.c b/edge.c index c0dc098..6d786ef 100644 --- a/edge.c +++ b/edge.c @@ -140,9 +140,7 @@ static void help() { "-l \n" " " "[-p ] [-M ] " -#ifdef __linux__ "[-D] " -#endif "[-r] [-E] [-v] [-i ] [-t ] [-A] [-h]\n\n"); #if defined(N2N_CAN_NAME_IFACE) @@ -166,10 +164,8 @@ static void help() { printf("-m | Fix MAC address for the TAP interface (otherwise it may be random)\n" " | eg. -m 01:02:03:04:05:06\n"); printf("-M | Specify n2n MTU of edge interface (default %d).\n", DEFAULT_MTU); -#ifdef __linux__ printf("-D | Enable PMTU discovery. PMTU discovery can reduce fragmentation but\n" " | causes connections stall when not properly supported.\n"); -#endif printf("-r | Enable packet forwarding through n2n community.\n"); #ifdef N2N_HAVE_AES printf("-A | Use AES CBC for encryption (default=use twofish).\n"); @@ -257,13 +253,11 @@ static int setOption(int optkey, char *optargument, n2n_priv_config_t *ec, n2n_e break; } -#ifdef __linux__ case 'D' : /* enable PMTU discovery */ { conf->disable_pmtu_discovery = 0; break; } -#endif case 'k': /* encrypt key */ { @@ -393,7 +387,7 @@ static int loadFromCLI(int argc, char *argv[], n2n_edge_conf_t *conf, n2n_priv_c u_char c; while((c = getopt_long(argc, argv, - "k:a:bc:Eu:g:m:M:s:d:l:p:fvhrt:i:S" + "k:a:bc:Eu:g:m:M:s:d:l:p:fvhrt:i:SD" #ifdef N2N_HAVE_AES "A" #endif diff --git a/edge_utils.c b/edge_utils.c index 585b4a5..b99f91e 100644 --- a/edge_utils.c +++ b/edge_utils.c @@ -1799,6 +1799,8 @@ void edge_term(n2n_edge_t * eee) { /* ************************************** */ static int edge_init_sockets(n2n_edge_t *eee, int udp_local_port, int mgmt_port, uint8_t tos) { + int sockopt; + if(udp_local_port > 0) traceEvent(TRACE_NORMAL, "Binding to local port %d", udp_local_port); @@ -1808,10 +1810,9 @@ static int edge_init_sockets(n2n_edge_t *eee, int udp_local_port, int mgmt_port, return(-1); } -#ifdef __linux__ if(tos) { /* https://www.tucny.com/Home/dscp-tos */ - int sockopt = tos; + sockopt = tos; if(setsockopt(eee->udp_sock, IPPROTO_IP, IP_TOS, &sockopt, sizeof(sockopt)) == 0) traceEvent(TRACE_NORMAL, "TOS set to 0x%x", tos); @@ -1819,15 +1820,13 @@ static int edge_init_sockets(n2n_edge_t *eee, int udp_local_port, int mgmt_port, traceEvent(TRACE_ERROR, "Could not set TOS 0x%x[%d]: %s", tos, errno, strerror(errno)); } - if(eee->conf.disable_pmtu_discovery) { - int sockopt = 0; + sockopt = (eee->conf.disable_pmtu_discovery) ? IP_PMTUDISC_DONT : IP_PMTUDISC_DO; - if(setsockopt(eee->udp_sock, IPPROTO_IP, IP_MTU_DISCOVER, &sockopt, sizeof(sockopt)) < 0) - traceEvent(TRACE_WARNING, "Could not disable PMTU discovery[%d]: %s", errno, strerror(errno)); - else - traceEvent(TRACE_DEBUG, "PMTU discovery disabled"); - } -#endif + if(setsockopt(eee->udp_sock, IPPROTO_IP, IP_MTU_DISCOVER, &sockopt, sizeof(sockopt)) < 0) + traceEvent(TRACE_WARNING, "Could not %s PMTU discovery[%d]: %s", + (eee->conf.disable_pmtu_discovery) ? "disable" : "enable", errno, strerror(errno)); + else + traceEvent(TRACE_DEBUG, "PMTU discovery %s", (eee->conf.disable_pmtu_discovery) ? "disabled" : "enabled"); eee->udp_mgmt_sock = open_socket(mgmt_port, 0 /* bind LOOPBACK */); if(eee->udp_mgmt_sock < 0) {