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

Commit 08870bd1 authored by Maciej Żenczykowski's avatar Maciej Żenczykowski
Browse files

ANDROID: namespace'ify tcp_default_init_rwnd implementation



Not needed in 4.19+ since this Android specific sysctl was
not included in later kernels.

Test: via uml net tests with namespaces enabled
Bug: 149894399
Signed-off-by: default avatarMaciej Żenczykowski <maze@google.com>
Change-Id: I2ad1dbc977d40ee260bde23c6ed32f2706082660
parent 4f02b6c9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -128,6 +128,7 @@ struct netns_ipv4 {
	int sysctl_tcp_sack;
	int sysctl_tcp_window_scaling;
	int sysctl_tcp_timestamps;
	int sysctl_tcp_default_init_rwnd;
	struct inet_timewait_death_row tcp_death_row;
	int sysctl_max_syn_backlog;

+3 −3
Original line number Diff line number Diff line
@@ -277,7 +277,6 @@ extern int sysctl_tcp_autocorking;
extern int sysctl_tcp_invalid_ratelimit;
extern int sysctl_tcp_pacing_ss_ratio;
extern int sysctl_tcp_pacing_ca_ratio;
extern int sysctl_tcp_default_init_rwnd;

extern atomic_long_t tcp_memory_allocated;
extern struct percpu_counter tcp_sockets_allocated;
@@ -1316,7 +1315,7 @@ static inline void tcp_sack_reset(struct tcp_options_received *rx_opt)
	rx_opt->num_sacks = 0;
}

u32 tcp_default_init_rwnd(u32 mss);
u32 tcp_default_init_rwnd(struct net *net, u32 mss);
void tcp_cwnd_restart(struct sock *sk, s32 delta);

static inline void tcp_slow_start_after_idle_check(struct sock *sk)
@@ -1334,7 +1333,8 @@ static inline void tcp_slow_start_after_idle_check(struct sock *sk)
}

/* Determine a window scaling and initial window to offer. */
void tcp_select_initial_window(int __space, __u32 mss, __u32 *rcv_wnd,
void tcp_select_initial_window(struct net *net,
			       int __space, __u32 mss, __u32 *rcv_wnd,
			       __u32 *window_clamp, int wscale_ok,
			       __u8 *rcv_wscale, __u32 init_rcv_wnd);

+1 −1
Original line number Diff line number Diff line
@@ -390,7 +390,7 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
	/* Try to redo what tcp_v4_send_synack did. */
	req->rsk_window_clamp = tp->window_clamp ? :dst_metric(&rt->dst, RTAX_WINDOW);

	tcp_select_initial_window(tcp_full_space(sk), req->mss,
	tcp_select_initial_window(sock_net(sk), tcp_full_space(sk), req->mss,
				  &req->rsk_rcv_wnd, &req->rsk_window_clamp,
				  ireq->wscale_ok, &rcv_wscale,
				  dst_metric(&rt->dst, RTAX_INITRWND));
+11 −22
Original line number Diff line number Diff line
@@ -29,7 +29,9 @@

static int zero;
static int one = 1;
static int three = 3;
static int four = 4;
static int hundred = 100;
static int thousand = 1000;
static int gso_max_segs = GSO_MAX_SEGS;
static int tcp_retr1_max = 255;
@@ -201,21 +203,6 @@ static int ipv4_ping_group_range(struct ctl_table *table, int write,
	return ret;
}

/* Validate changes from /proc interface. */
static int proc_tcp_default_init_rwnd(struct ctl_table *ctl, int write,
				      void __user *buffer,
				      size_t *lenp, loff_t *ppos)
{
	int old_value = *(int *)ctl->data;
	int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
	int new_value = *(int *)ctl->data;

	if (write && ret == 0 && (new_value < 3 || new_value > 100))
		*(int *)ctl->data = old_value;

	return ret;
}

static int proc_tcp_congestion_control(struct ctl_table *ctl, int write,
				       void __user *buffer, size_t *lenp, loff_t *ppos)
{
@@ -743,13 +730,6 @@ static struct ctl_table ipv4_table[] = {
		.mode		= 0444,
		.proc_handler   = proc_tcp_available_ulp,
	},
	{
		.procname       = "tcp_default_init_rwnd",
		.data           = &sysctl_tcp_default_init_rwnd,
		.maxlen         = sizeof(int),
		.mode           = 0644,
		.proc_handler   = proc_tcp_default_init_rwnd
	},
	{
		.procname	= "icmp_msgs_per_sec",
		.data		= &sysctl_icmp_msgs_per_sec,
@@ -1190,6 +1170,15 @@ static struct ctl_table ipv4_net_table[] = {
		.mode		= 0644,
		.proc_handler	= proc_dointvec
	},
	{
		.procname       = "tcp_default_init_rwnd",
		.data           = &init_net.ipv4.sysctl_tcp_default_init_rwnd,
		.maxlen         = sizeof(int),
		.mode           = 0644,
		.proc_handler   = proc_dointvec_minmax,
		.extra1		= &three,
		.extra2		= &hundred,
	},
	{ }
};

+1 −2
Original line number Diff line number Diff line
@@ -95,7 +95,6 @@ int sysctl_tcp_min_rtt_wlen __read_mostly = 300;
int sysctl_tcp_moderate_rcvbuf __read_mostly = 1;
int sysctl_tcp_early_retrans __read_mostly = 3;
int sysctl_tcp_invalid_ratelimit __read_mostly = HZ/2;
int sysctl_tcp_default_init_rwnd __read_mostly = TCP_INIT_CWND * 2;

#define FLAG_DATA		0x01 /* Incoming frame contained data.		*/
#define FLAG_WIN_UPDATE		0x02 /* Incoming ACK was a window update.	*/
@@ -421,7 +420,7 @@ static void tcp_fixup_rcvbuf(struct sock *sk)
	int rcvmem;

	rcvmem = 2 * SKB_TRUESIZE(mss + MAX_TCP_HEADER) *
		 tcp_default_init_rwnd(mss);
		 tcp_default_init_rwnd(sock_net(sk), mss);

	/* Dynamic Right Sizing (DRS) has 2 to 3 RTT latency
	 * Allow enough cushion so that sender is not limited by our window
Loading