From: Guus Sliepen Date: Sun, 28 Feb 2010 17:20:13 +0000 (+0100) Subject: Clamp MSS to miminum MTU in both directions. X-Git-Tag: release-1.0.13~20 X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=commitdiff_plain;h=3cb91d75f874e3398c35cd4280c1e0a1ceeedabc;ds=sidebyside Clamp MSS to miminum MTU in both directions. Clamp MSS of both incoming and outgoing packets, and use the minimum of the PMTU of both directions when clamping. --- diff --git a/src/route.c b/src/route.c index 664fed89..6c381ccf 100644 --- a/src/route.c +++ b/src/route.c @@ -94,9 +94,13 @@ static bool checklength(node_t *source, vpn_packet_t *packet, length_t length) { } static void clamp_mss(const node_t *source, const node_t *via, vpn_packet_t *packet) { - if(!via || via == myself || !(via->options & OPTION_CLAMP_MSS)) + if(!source || !via || !(via->options & OPTION_CLAMP_MSS)) return; + uint16_t mtu = source->mtu; + if(via != myself && via->mtu < mtu) + mtu = via->mtu; + /* Find TCP header */ int start = 0; uint16_t type = packet->data[12] << 8 | packet->data[13]; @@ -140,7 +144,7 @@ static void clamp_mss(const node_t *source, const node_t *via, vpn_packet_t *pac /* Found it */ uint16_t oldmss = packet->data[start + 22 + i] << 8 | packet->data[start + 23 + i]; - uint16_t newmss = via->mtu - start - 20; + uint16_t newmss = mtu - start - 20; uint16_t csum = packet->data[start + 16] << 8 | packet->data[start + 17]; if(oldmss <= newmss)