aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorVlad Yasevich <vladislav.yasevich@hp.com>2009-09-04 18:20:59 -0400
committerVlad Yasevich <vladislav.yasevich@hp.com>2009-09-04 18:20:59 -0400
commit4d3c46e6833208428d366630aa708f6876e61fc1 (patch)
treecb5f57a90a261b7443d202d96cf5725dbba371c8 /include/net
parent33ce828131ca6655b48bd2070dadd80f816dfe0d (diff)
sctp: drop a_rwnd to 0 when receive buffer overflows.
SCTP has a problem that when small chunks are used, it is possible to exhaust the receiver buffer without fully closing receive window. This happens due to all overhead that we have account for with small messages. To fix this, when receive buffer is exceeded, we'll drop the window to 0 and save the 'drop' portion. When application starts reading data and freeing up recevie buffer space, we'll wait until we've reached the 'drop' window and then add back this 'drop' one mtu at a time. This worked well in testing and under stress produced rather even recovery. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/sctp/structs.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 97024faaa08f..b1bd2689bb70 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -1739,6 +1739,12 @@ struct sctp_association {
1739 */ 1739 */
1740 __u32 rwnd_over; 1740 __u32 rwnd_over;
1741 1741
1742 /* Keeps treack of rwnd pressure. This happens when we have
1743 * a window, but not recevie buffer (i.e small packets). This one
1744 * is releases slowly (1 PMTU at a time ).
1745 */
1746 __u32 rwnd_press;
1747
1742 /* This is the sndbuf size in use for the association. 1748 /* This is the sndbuf size in use for the association.
1743 * This corresponds to the sndbuf size for the association, 1749 * This corresponds to the sndbuf size for the association,
1744 * as specified in the sk->sndbuf. 1750 * as specified in the sk->sndbuf.