X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Froute.c;h=6c381ccf852b13159f105a733570159426654573;hp=c04b0ad757ebc46d34698e3d8a8e0b6853050f5a;hb=d47ab576a25d91600acf7eecf376ed026bdc9c83;hpb=b45511118421920771f5dcd5e4bafc04376e4450 diff --git a/src/route.c b/src/route.c index c04b0ad7..6c381ccf 100644 --- a/src/route.c +++ b/src/route.c @@ -1,7 +1,7 @@ /* route.c -- routing Copyright (C) 2000-2005 Ivo Timmermans, - 2000-2009 Guus Sliepen + 2000-2010 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -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) @@ -188,6 +192,7 @@ static void learn_mac(mac_t *address) { subnet->net.mac.address = *address; subnet->weight = 10; subnet_add(myself, subnet); + subnet_update(myself, subnet, true); /* And tell all other tinc daemons it's our MAC */ @@ -223,6 +228,7 @@ void age_subnets(void) { send_del_subnet(c, s); } + subnet_update(myself, s, false); subnet_del(myself, s); } }