Loading Documentation/networking/ip-sysctl.txt +7 −0 Original line number Diff line number Diff line Loading @@ -362,6 +362,13 @@ tcp_workaround_signed_windows - BOOLEAN not receive a window scaling option from them. Default: 0 tcp_slow_start_after_idle - BOOLEAN If set, provide RFC2861 behavior and time out the congestion window after an idle period. An idle period is defined at the current RTO. If unset, the congestion window will not be timed out after an idle period. Default: 1 IP Variables: ip_local_port_range - 2 INTEGERS Loading include/linux/sysctl.h +1 −0 Original line number Diff line number Diff line Loading @@ -405,6 +405,7 @@ enum NET_TCP_BASE_MSS=114, NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS=115, NET_TCP_DMA_COPYBREAK=116, NET_TCP_SLOW_START_AFTER_IDLE=117, }; enum { Loading include/net/tcp.h +1 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ extern int sysctl_tcp_abc; extern int sysctl_tcp_mtu_probing; extern int sysctl_tcp_base_mss; extern int sysctl_tcp_workaround_signed_windows; extern int sysctl_tcp_slow_start_after_idle; extern atomic_t tcp_memory_allocated; extern atomic_t tcp_sockets_allocated; Loading net/ipv4/sysctl_net_ipv4.c +8 −0 Original line number Diff line number Diff line Loading @@ -690,6 +690,14 @@ ctl_table ipv4_table[] = { .proc_handler = &proc_dointvec }, #endif { .ctl_name = NET_TCP_SLOW_START_AFTER_IDLE, .procname = "tcp_slow_start_after_idle", .data = &sysctl_tcp_slow_start_after_idle, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec }, { .ctl_name = 0 } }; Loading net/ipv4/tcp_output.c +5 −1 Original line number Diff line number Diff line Loading @@ -59,6 +59,9 @@ int sysctl_tcp_tso_win_divisor = 3; int sysctl_tcp_mtu_probing = 0; int sysctl_tcp_base_mss = 512; /* By default, RFC2861 behavior. */ int sysctl_tcp_slow_start_after_idle = 1; static void update_send_head(struct sock *sk, struct tcp_sock *tp, struct sk_buff *skb) { Loading Loading @@ -138,7 +141,8 @@ static void tcp_event_data_sent(struct tcp_sock *tp, struct inet_connection_sock *icsk = inet_csk(sk); const u32 now = tcp_time_stamp; if (!tp->packets_out && (s32)(now - tp->lsndtime) > icsk->icsk_rto) if (sysctl_tcp_slow_start_after_idle && (!tp->packets_out && (s32)(now - tp->lsndtime) > icsk->icsk_rto)) tcp_cwnd_restart(sk, __sk_dst_get(sk)); tp->lsndtime = now; Loading Loading
Documentation/networking/ip-sysctl.txt +7 −0 Original line number Diff line number Diff line Loading @@ -362,6 +362,13 @@ tcp_workaround_signed_windows - BOOLEAN not receive a window scaling option from them. Default: 0 tcp_slow_start_after_idle - BOOLEAN If set, provide RFC2861 behavior and time out the congestion window after an idle period. An idle period is defined at the current RTO. If unset, the congestion window will not be timed out after an idle period. Default: 1 IP Variables: ip_local_port_range - 2 INTEGERS Loading
include/linux/sysctl.h +1 −0 Original line number Diff line number Diff line Loading @@ -405,6 +405,7 @@ enum NET_TCP_BASE_MSS=114, NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS=115, NET_TCP_DMA_COPYBREAK=116, NET_TCP_SLOW_START_AFTER_IDLE=117, }; enum { Loading
include/net/tcp.h +1 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ extern int sysctl_tcp_abc; extern int sysctl_tcp_mtu_probing; extern int sysctl_tcp_base_mss; extern int sysctl_tcp_workaround_signed_windows; extern int sysctl_tcp_slow_start_after_idle; extern atomic_t tcp_memory_allocated; extern atomic_t tcp_sockets_allocated; Loading
net/ipv4/sysctl_net_ipv4.c +8 −0 Original line number Diff line number Diff line Loading @@ -690,6 +690,14 @@ ctl_table ipv4_table[] = { .proc_handler = &proc_dointvec }, #endif { .ctl_name = NET_TCP_SLOW_START_AFTER_IDLE, .procname = "tcp_slow_start_after_idle", .data = &sysctl_tcp_slow_start_after_idle, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_dointvec }, { .ctl_name = 0 } }; Loading
net/ipv4/tcp_output.c +5 −1 Original line number Diff line number Diff line Loading @@ -59,6 +59,9 @@ int sysctl_tcp_tso_win_divisor = 3; int sysctl_tcp_mtu_probing = 0; int sysctl_tcp_base_mss = 512; /* By default, RFC2861 behavior. */ int sysctl_tcp_slow_start_after_idle = 1; static void update_send_head(struct sock *sk, struct tcp_sock *tp, struct sk_buff *skb) { Loading Loading @@ -138,7 +141,8 @@ static void tcp_event_data_sent(struct tcp_sock *tp, struct inet_connection_sock *icsk = inet_csk(sk); const u32 now = tcp_time_stamp; if (!tp->packets_out && (s32)(now - tp->lsndtime) > icsk->icsk_rto) if (sysctl_tcp_slow_start_after_idle && (!tp->packets_out && (s32)(now - tp->lsndtime) > icsk->icsk_rto)) tcp_cwnd_restart(sk, __sk_dst_get(sk)); tp->lsndtime = now; Loading