X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Froute.c;h=6c381ccf852b13159f105a733570159426654573;hp=664fed89fbd102edb543b637ed7148edaa2009d9;hb=3cb91d75f874e3398c35cd4280c1e0a1ceeedabc;hpb=ddb8cb0779ed36d17ce186dd0bf67e9f0c860d28 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)