linux/net/sctp
Neil Horman 4244854d22 sctp: be more restrictive in transport selection on bundled sacks
It was noticed recently that when we send data on a transport, its possible that
we might bundle a sack that arrived on a different transport.  While this isn't
a major problem, it does go against the SHOULD requirement in section 6.4 of RFC
2960:

 An endpoint SHOULD transmit reply chunks (e.g., SACK, HEARTBEAT ACK,
   etc.) to the same destination transport address from which it
   received the DATA or control chunk to which it is replying.  This
   rule should also be followed if the endpoint is bundling DATA chunks
   together with the reply chunk.

This patch seeks to correct that.  It restricts the bundling of sack operations
to only those transports which have moved the ctsn of the association forward
since the last sack.  By doing this we guarantee that we only bundle outbound
saks on a transport that has received a chunk since the last sack.  This brings
us into stricter compliance with the RFC.

Vlad had initially suggested that we strictly allow only sack bundling on the
transport that last moved the ctsn forward.  While this makes sense, I was
concerned that doing so prevented us from bundling in the case where we had
received chunks that moved the ctsn on multiple transports.  In those cases, the
RFC allows us to select any of the transports having received chunks to bundle
the sack on.  so I've modified the approach to allow for that, by adding a state
variable to each transport that tracks weather it has moved the ctsn since the
last sack.  This I think keeps our behavior (and performance), close enough to
our current profile that I think we can do this without a sysctl knob to
enable/disable it.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: Vlad Yaseivch <vyasevich@gmail.com>
CC: David S. Miller <davem@davemloft.net>
CC: linux-sctp@vger.kernel.org
Reported-by: Michele Baldessari <michele@redhat.com>
Reported-by: sorin serban <sserban@redhat.com>
Acked-by: Vlad Yasevich <vyasevich@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2012-06-30 22:44:35 -07:00
..
associola.c sctp: be more restrictive in transport selection on bundled sacks 2012-06-30 22:44:35 -07:00
auth.c
bind_addr.c
chunk.c
command.c
debug.c
endpointola.c
input.c net: add a limit parameter to sk_add_backlog() 2012-04-23 22:28:28 -04:00
inqueue.c
ipv6.c
Kconfig
Makefile
objcnt.c
output.c sctp: be more restrictive in transport selection on bundled sacks 2012-06-30 22:44:35 -07:00
outqueue.c net: cleanup unsigned to unsigned int 2012-04-15 12:44:40 -04:00
primitive.c
probe.c
proc.c
protocol.c sctp: fix warning when compiling without IPv6 2012-06-19 00:26:26 -07:00
sm_make_chunk.c sctp: be more restrictive in transport selection on bundled sacks 2012-06-30 22:44:35 -07:00
sm_sideeffect.c sctp: be more restrictive in transport selection on bundled sacks 2012-06-30 22:44:35 -07:00
sm_statefuns.c net: Convert net_ratelimit uses to net_<level>_ratelimited 2012-05-15 13:45:03 -04:00
sm_statetable.c
socket.c net: Convert net_ratelimit uses to net_<level>_ratelimited 2012-05-15 13:45:03 -04:00
ssnmap.c
sysctl.c net: Convert all sysctl registrations to register_net_sysctl 2012-04-20 21:22:30 -04:00
transport.c sctp: be more restrictive in transport selection on bundled sacks 2012-06-30 22:44:35 -07:00
tsnmap.c sctp: be more restrictive in transport selection on bundled sacks 2012-06-30 22:44:35 -07:00
ulpevent.c sctp: be more restrictive in transport selection on bundled sacks 2012-06-30 22:44:35 -07:00
ulpqueue.c sctp: be more restrictive in transport selection on bundled sacks 2012-06-30 22:44:35 -07:00