sctp: Fix error count increments that were results of HEARTBEATS
authorVlad Yasevich <vladislav.yasevich@hp.com>
Wed, 26 Aug 2009 13:36:25 +0000 (09:36 -0400)
committerVlad Yasevich <vladislav.yasevich@hp.com>
Fri, 4 Sep 2009 22:20:58 +0000 (18:20 -0400)
commitb9f8478682445c2a3e0b87718a0563ef543ad94e
tree9bc0351c0a329a0780c6f2f7291e9207727de686
parentd71a09ed555e52299b5d3ad8945bdf84f65423a6
sctp: Fix error count increments that were results of HEARTBEATS

SCTP RFC 4960 states that unacknowledged HEARTBEATS count as
errors agains a given transport or endpoint.  As such, we
should increment the error counts for only for unacknowledged
HB, otherwise we detect failure too soon.  This goes for both
the overall error count and the path error count.

Now, there is a difference in how the detection is done
between the two.  The path error detection is done after
the increment, so to detect it properly, we actually need
to exceed the path threshold.  The overall error detection
is done _BEFORE_ the increment.  Thus to detect the failure,
it's enough for the error count to match the threshold.
This is why all the state functions use '>=' to detect failure,
while path detection uses '>'.

Thanks goes to Chunbo Luo <chunbo.luo@windriver.com> who first
proposed patches to fix this issue and made me re-read the spec
and the code to figure out how this cruft really works.

Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
net/sctp/sm_sideeffect.c
net/sctp/sm_statefuns.c