]> git.baikalelectronics.ru Git - kernel.git/commit
tcp: advertise MSS requested by user
authorTom Quetchenbach <virtualphtn@gmail.com>
Sun, 21 Sep 2008 07:21:51 +0000 (00:21 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 21 Sep 2008 07:21:51 +0000 (00:21 -0700)
commitddd27777f6fde56bcd1a6845dc2c33759ea8399b
tree2077107cbf6011c826937f56a008bb3d5a0306a2
parent51f4156718880380c9f9afe48b9705b12d887dcb
tcp: advertise MSS requested by user

I'm trying to use the TCP_MAXSEG option to setsockopt() to set the MSS
for both sides of a bidirectional connection.

man tcp says: "If this option is set before connection establishment, it
also changes the MSS value announced to the other end in the initial
packet."

However, the kernel only uses the MTU/route cache to set the advertised
MSS. That means if I set the MSS to, say, 500 before calling connect(),
I will send at most 500-byte packets, but I will still receive 1500-byte
packets in reply.

This is a bug, either in the kernel or the documentation.

This patch (applies to latest net-2.6) reduces the advertised value to
that requested by the user as long as setsockopt() is called before
connect() or accept(). This seems like the behavior that one would
expect as well as that which is documented.

I've tried to make sure that things that depend on the advertised MSS
are set correctly.

Signed-off-by: Tom Quetchenbach <virtualphtn@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_output.c