diff --git a/CHANGELOG b/CHANGELOG index 69483772..ec814065 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -49,6 +49,10 @@ HISTORY ++ Bugfixes: + 2011-10-18: Simon Goldschmidt + * tcp_impl.h, tcp_out.c: fixed bug #34587: TCP_BUILD_MSS_OPTION doesn't + consider netif->mtu, causes slow network + 2011-10-18: Simon Goldschmidt * sockets.c: fixed bug #34581 missing parentheses in udplite sockets code diff --git a/src/core/tcp_out.c b/src/core/tcp_out.c index 63126c26..ef182550 100644 --- a/src/core/tcp_out.c +++ b/src/core/tcp_out.c @@ -1065,7 +1065,7 @@ tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb) //LWIP_ASSERT("seg->tcphdr not aligned", ((mem_ptr_t)seg->tcphdr % MEM_ALIGNMENT) == 0); opts = (u32_t *)(void *)(seg->tcphdr + 1); if (seg->flags & TF_SEG_OPTS_MSS) { - TCP_BUILD_MSS_OPTION(*opts); + *opts = TCP_BUILD_MSS_OPTION(pcb->mss); opts += 1; } #if LWIP_TCP_TIMESTAMPS diff --git a/src/include/lwip/tcp_impl.h b/src/include/lwip/tcp_impl.h index 2ee8b764..1d30af60 100644 --- a/src/include/lwip/tcp_impl.h +++ b/src/include/lwip/tcp_impl.h @@ -301,10 +301,7 @@ struct tcp_seg { (flags & TF_SEG_OPTS_TS ? 12 : 0) /** This returns a TCP header option for MSS in an u32_t */ -#define TCP_BUILD_MSS_OPTION(x) (x) = PP_HTONL(((u32_t)2 << 24) | \ - ((u32_t)4 << 16) | \ - (((u32_t)TCP_MSS / 256) << 8) | \ - (TCP_MSS & 255)) +#define TCP_BUILD_MSS_OPTION(mss) htonl(0x02040000 | ((mss) & 0xFFFF)) /* Global variables: */ extern struct tcp_pcb *tcp_input_pcb;