Clamp MSS of both incoming and outgoing packets, and use the minimum of the
PMTU of both directions when clamping.
}
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];
/* 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)