Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 35089bb2 authored by David S. Miller's avatar David S. Miller
Browse files

[TCP]: Add tcp_slow_start_after_idle sysctl.



A lot of people have asked for a way to disable tcp_cwnd_restart(),
and it seems reasonable to add a sysctl to do that.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9e1881de
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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 {
+1 −0
Original line number Diff line number Diff line
@@ -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;
+8 −0
Original line number Diff line number Diff line
@@ -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 }
};

+5 −1
Original line number Diff line number Diff line
@@ -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)
{
@@ -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;