From 6f25bf1889b281241f694b6978cf6643403b9d34 Mon Sep 17 00:00:00 2001 From: Nikos Mavrogiannopoulos Date: Thu, 30 Jan 2014 14:01:54 +0100 Subject: [PATCH] ensure that our MTU discovery will not try an MTU smaller than the minimum. --- src/worker-vpn.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/worker-vpn.c b/src/worker-vpn.c index 6c1ca2dc..4297e375 100644 --- a/src/worker-vpn.c +++ b/src/worker-vpn.c @@ -848,17 +848,19 @@ void mtu_set(worker_st * ws, unsigned mtu) static int mtu_not_ok(worker_st * ws) { +unsigned min = MIN_MTU(ws); + ws->last_bad_mtu = ws->conn_mtu; - if (ws->last_good_mtu >= ws->conn_mtu) { - ws->last_good_mtu = (2 * (ws->conn_mtu)) / 3; + if (ws->last_good_mtu == min) { + oclog(ws, LOG_INFO, + "could not calculate a sufficient MTU. Disabling DTLS."); + ws->udp_state = UP_DISABLED; + return -1; + } - if (ws->last_good_mtu < MIN_MTU(ws)) { - oclog(ws, LOG_INFO, - "could not calculate a sufficient MTU. Disabling DTLS."); - ws->udp_state = UP_DISABLED; - return -1; - } + if (ws->last_good_mtu >= ws->conn_mtu) { + ws->last_good_mtu = MAX(((2 * (ws->conn_mtu)) / 3), min); } mtu_set(ws, ws->last_good_mtu);