X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Froute.c;h=664fed89fbd102edb543b637ed7148edaa2009d9;hp=77bec047b4738f0c2c6a18789aebe3546714735c;hb=40d91ff619a6ea24a2a35c9d934bcc6bace27e24;hpb=95928f7c2910a7da01a89cdc63c86c4d87fac004 diff --git a/src/route.c b/src/route.c index 77bec047..664fed89 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,7 +94,7 @@ 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) + if(!via || via == myself || !(via->options & OPTION_CLAMP_MSS)) return; /* Find TCP header */ @@ -112,6 +112,9 @@ static void clamp_mss(const node_t *source, const node_t *via, vpn_packet_t *pac /* Use data offset field to calculate length of options field */ int len = ((packet->data[start + 12] >> 4) - 5) * 4; + if(packet->len < start + 20 + len) + return; + /* Search for MSS option header */ for(int i = 0; i < len;) { if(packet->data[start + 20 + i] == 0) @@ -185,6 +188,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 */ @@ -220,6 +224,7 @@ void age_subnets(void) { send_del_subnet(c, s); } + subnet_update(myself, s, false); subnet_del(myself, s); } }