diff options
| author | Len Brown <len.brown@intel.com> | 2006-01-06 16:34:21 -0500 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2006-01-06 16:34:21 -0500 |
| commit | 25da0974601fc8096461f3d3f7ca3aab8e79adfb (patch) | |
| tree | f9b3c1bfbc63fdb6a94e82177b8c3ae891125422 /net/ipv4/tcp_cong.c | |
| parent | 036d25f79ddfbc9878da24ef8e468a6d22caa605 (diff) | |
| parent | d99cf9d679a520d67f81d805b7cb91c68e1847f0 (diff) | |
Auto-update from upstream
Diffstat (limited to 'net/ipv4/tcp_cong.c')
| -rw-r--r-- | net/ipv4/tcp_cong.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c index c7cc62c8dc12..e688c687d62d 100644 --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c @@ -174,6 +174,34 @@ int tcp_set_congestion_control(struct sock *sk, const char *name) return err; } + +/* + * Linear increase during slow start + */ +void tcp_slow_start(struct tcp_sock *tp) +{ + if (sysctl_tcp_abc) { + /* RFC3465: Slow Start + * TCP sender SHOULD increase cwnd by the number of + * previously unacknowledged bytes ACKed by each incoming + * acknowledgment, provided the increase is not more than L + */ + if (tp->bytes_acked < tp->mss_cache) + return; + + /* We MAY increase by 2 if discovered delayed ack */ + if (sysctl_tcp_abc > 1 && tp->bytes_acked > 2*tp->mss_cache) { + if (tp->snd_cwnd < tp->snd_cwnd_clamp) + tp->snd_cwnd++; + } + } + tp->bytes_acked = 0; + + if (tp->snd_cwnd < tp->snd_cwnd_clamp) + tp->snd_cwnd++; +} +EXPORT_SYMBOL_GPL(tcp_slow_start); + /* * TCP Reno congestion control * This is special case used for fallback as well. |
