projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Clamp MSS to miminum MTU in both directions.
[tinc]
/
src
/
route.c
diff --git
a/src/route.c
b/src/route.c
index
664fed8
..
6c381cc
100644
(file)
--- 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) {
}
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;
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];
/* 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];
/* 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)
uint16_t csum = packet->data[start + 16] << 8 | packet->data[start + 17];
if(oldmss <= newmss)